2016-06-23 3 views
0

Я создаю четыре съемных потока и в каждом потоке я даю 1 второй сон (сон - это мое приложение) из-за того, что только для ОС только 2 потока и другие два потока сидят идеально, но если i удалить сон, все потоки запланированы ОС, но мое приложение требует, чтобы каждый поток должен перейти в спящий режим, как только он выполнил свою задачу.проблема с программированием pthread во время использования сна

Я уже пробовал спать, наносить и устанавливать свойства потоков, приоритет и круговое планирование в pthread, но не успех.

Пожалуйста, предложите, что еще я могу сделать, чтобы решить проблему с моим приложением.

+1

Что именно вы пытаетесь сделать? Если вы просто хотите, чтобы потоки подождали приостановлено до тех пор, пока у них не будет работы, посмотрите на переменные состояния. – Dmitri

+0

Вы помещаете свои потоки в сон, когда они блокируют мьютексы или что-то подобное? Спящий не разблокирует мьютексы, манипулирует семафорами, переменными состояния сигнала и т. Д. –

+2

Здесь будет [mcve]. –

ответ

0

Теперь я даю один второй интервал для каждого потока, используя ниже логику и удаляю сон из моего кода, и проблема разрешена (теперь запланированы все четыре потока).

(void) gettimeofday (&nowtime, NULL); 
unsigned long long currentTime = (nowtime.tv_sec * 1000000) + nowtime.tv_usec; 
unsigned long long FutureTime = ((nowtime.tv_sec + interval) * 1000000) + nowtime.tv_usec; 
while(FutureTime >= currentTime) 
{ 
    (void) gettimeofday (&nowtime, NULL); 
    currentTime = (nowtime.tv_sec * 1000000) + nowtime.tv_usec; 
} 
+1

Вы уверены, что занятый цикл, как это, хорошая идея? Ваша нить не будет спать ... она просто съедает столько циклов процессора, сколько может, хотя она должна быть просто ждать. Единственная причина, по которой вы не используете другие методы, которые вы пытались сделать, чтобы поток не планировался * во время ожидания *? Это может быть не плохо, если это запланировано, когда заканчивается ожидание. – Dmitri

+0

Да, он будет использовать цикл процессора, но, по крайней мере, его расписание для всех потоков, не сидящих идеально, если какая-либо идея лучше доступна. Пожалуйста, предлагайте, потому что я также думаю о цикле процессора. –

+1

Почему спальные нити нужно планировать во время сна? Разве не достаточно, чтобы они планировали * после * ожидания, когда им действительно нужно что-то делать? Если вы хотите прервать ожидание, вы можете попробовать время ожидания на переменную состояния, время ожидания в файловом дескрипторе или, возможно, использовать сигналы. Или, по крайней мере, вы можете дать срез времени каждый раз, когда вы проверяете интервал и определяете, что ожидание не завершено. – Dmitri

 Смежные вопросы

  • Нет связанных вопросов^_^