2013-07-22 1 views
2

В процессе имеется поток управления и группа рабочих потоков. Режим работы нравится:
(1) Все рабочие потоки и поток управления запущены;
(2) Когда контрольная нить проверяет некоторые изменения условий, она приостанавливает все рабочие потоки;
(3) После проверки всех рабочих потоков приостановлено, управляющий поток изменяет некоторое содержимое в памяти;
(4) После модификации управляющий поток возобновляет все рабочие потоки.
Мои вопросы:
(1) На шагах 2 и 4, как управлять потоком приостанавливать и возобновлять все рабочие потоки? Я рассматриваю использование pthread_cond_wait и pthread_cond_signal, но это кажется только ОК для потока управления и рабочего потока.
(2) На шаге 3, как контролировать поток, проверять все рабочие потоки? Я считаю использование счетчика, есть ли хорошие методы?Управляющая нить приостанавливает и возобновляет группу рабочих потоков

+0

Я могу видеть список вопросов, но не вопрос. Что вы хотите и что вы уже пробовали? Но мое предложение - очереди очередей поиска или/и pthread_cond_signal – hetepeperfan

+0

@hetepeperfan: Спасибо за ваш ответ! Реальная вещь, которую я хочу, заключается в том, как реализовать: управляющий поток приостанавливает и возобновляет группу рабочих потоков. Ваше предложение: очереди очередей сообщений и/или pthread_cond_signal. Не могли бы вы объяснить подробно? –

ответ

1
In step 2 and step 4, how can control thread suspend and resume all worker threads? I consider using pthread_cond_wait and pthread_cond_signal, but it seems only OK for a control thread and a worker thread. 

Вы можете назначить приоритет потоков в PTHREAD и вы можете назначить более высокий приоритет управления потоками и планировать поток управления работать первым и сделать другие потоки ждать.

After checking all worker threads are suspended, the control thread modifies some contents in memory. 

Это как общая память? Если в его общей памяти вы можете блокировать мьютексы, чтобы один поток мог получить доступ к критическому разделу за раз.

Если у вас есть код, который будет легко понять вашу проблему.

+0

Спасибо за ваш ответ, но я думаю, что это не тот ответ, который я хочу. –

+0

@NanXiao: Отредактировано ответ –

1

Действительно ли вы должны приостановить потоки? Если я понимаю вас правильно, вы пытаетесь решить Readers writers problem. В этом случае я бы рекомендовал pthread_rwlock_t предоставить эксклюзивный доступ к разделяемой памяти для вашего потока управления.

+0

Нет способа приостановки потоков? Благодаря! –

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