Спящий PThread кроме того, кто делает вызов - PullRequest
0 голосов
/ 04 июля 2011

Итак, у меня есть куча pthreads, где один является «основным» потоком и определяет, должен ли рабочий поток работать или находиться в спящем режиме.Но определение POSIX для сна говорит о том, что The sleep() function shall cause the calling thread to be suspended from execution...

Очевидно, я мог бы сделать что-то неуклюжее, например, проверить каждый рабочий поток, чтобы увидеть, установлен ли флаг, но я ищу что-то немного лучше.Я надеюсь, что упускаю что-то очевидное, потому что это бросает рывок в моих планах.

1 Ответ

1 голос
/ 04 июля 2011

Если вы все равно взламываете Силка, думаю, вы можете делать все, что захотите

Как насчет того, чтобы каждая pthread приобрела единицу семафора до удаления из очереди (или кражи) рабочего объекта и освобождения его после выполнения работы? Конечно, может быть небольшая задержка, но количество потоков, доступных для работы, будет соответствовать количеству единиц, переданных семафору. Чтобы уменьшить количество доступных потоков на N из потока управления, подождите и получите N единиц, поэтому перекрыв N рабочих потоков. Чтобы запустить их снова, подайте сигнал N единиц.

Будет ли это работать для вашей системы?

Rgds, Martin

...