В процессе имеется поток управления и группа рабочих потоков. Режим работы нравится:
(1) Все рабочие потоки и поток управления запущены;
(2) Когда контрольная нить проверяет некоторые изменения условий, она приостанавливает все рабочие потоки;
(3) После проверки всех рабочих потоков приостановлено, управляющий поток изменяет некоторое содержимое в памяти;
(4) После модификации управляющий поток возобновляет все рабочие потоки.
Мои вопросы:
(1) На шагах 2 и 4, как управлять потоком приостанавливать и возобновлять все рабочие потоки? Я рассматриваю использование pthread_cond_wait и pthread_cond_signal, но это кажется только ОК для потока управления и рабочего потока.
(2) На шаге 3, как контролировать поток, проверять все рабочие потоки? Я считаю использование счетчика, есть ли хорошие методы?Управляющая нить приостанавливает и возобновляет группу рабочих потоков
ответ
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.
Это как общая память? Если в его общей памяти вы можете блокировать мьютексы, чтобы один поток мог получить доступ к критическому разделу за раз.
Если у вас есть код, который будет легко понять вашу проблему.
Спасибо за ваш ответ, но я думаю, что это не тот ответ, который я хочу. –
@NanXiao: Отредактировано ответ –
Действительно ли вы должны приостановить потоки? Если я понимаю вас правильно, вы пытаетесь решить Readers writers problem. В этом случае я бы рекомендовал pthread_rwlock_t предоставить эксклюзивный доступ к разделяемой памяти для вашего потока управления.
Нет способа приостановки потоков? Благодаря! –
- 1. приостанавливает поток из функции и возобновляет ее
- 2. Управляющая нить через кнопку
- 3. Синхронизация рабочих потоков
- 4. MediaPlayer приостанавливает текущую песню, воспроизводит другую и возвращается назад & возобновляет
- 5. NSUrlSession приостанавливает и возобновляет выпуск при блокировке устройства
- 6. Число потоков рабочих потоков Java
- 7. C# несколько многократных рабочих потоков
- 8. Создание рабочих потоков?
- 9. Редактор потоков, выбирающий нить
- 10. Отключение рабочих потоков изящно
- 11. .Net: Логическая нить и локальное хранилище потоков?
- 12. Сколько потоков/рабочих элементов используется?
- 13. Использование рабочих потоков в MFC
- 14. C# 1.1: Мониторинг рабочих потоков
- 15. libevent/epoll число рабочих потоков?
- 16. Отмена рабочих потоков в winforms
- 17. Задание числа приложений рабочих потоков
- 18. Основная нить ждать других потоков
- 19. Прерванная нить удалена пулом потоков
- 20. Как держать очередь сообщений и иметь группу рабочих потоков без опроса?
- 21. Как создать кнопку, которая приостанавливает поток, который находится внутри петли и другую кнопку, которая возобновляет
- 22. storm - как выбрать группу потоков
- 23. Pthreads - основная нить и другая нить
- 24. управляющая сериализация
- 25. Android приостанавливает приемник вещания
- 26. java: Шаблоны для мониторинга рабочих потоков?
- 27. Настройка рабочих потоков для сервера-подхвата
- 28. Настройка максимальных рабочих потоков в Django?
- 29. Предоставление рабочих мест для потоков - MPI
- 30. Проверьте, сколько потоков выполняются/выход нить
Я могу видеть список вопросов, но не вопрос. Что вы хотите и что вы уже пробовали? Но мое предложение - очереди очередей поиска или/и pthread_cond_signal – hetepeperfan
@hetepeperfan: Спасибо за ваш ответ! Реальная вещь, которую я хочу, заключается в том, как реализовать: управляющий поток приостанавливает и возобновляет группу рабочих потоков. Ваше предложение: очереди очередей сообщений и/или pthread_cond_signal. Не могли бы вы объяснить подробно? –