многопоточность — синхронизация C ++ pthread и многократное пробуждение для потока

вопрос о синхронизации потоков C ++.
Мы предполагаем, что есть 2 pthreads: Thread1 и Thread2.

  • Thread1 занимается своей задачей и, в некоторых случаях, он должен уведомлять об обновлении состояния в Thread2.

  • Thread2 занимается извлечением данных из синхронизированной очереди. Таким образом, Thread2 может спать, если очередь пуста.

Как я могу разбудить Thread2 при двух условиях:

  • Уведомление о новом сообщении в очереди;

    или же

  • изменение статуса Thread1

практические примеры кода приветствуются

2

Решение

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

2

Другие решения

Почему бы вам не использовать ту же очередь (но другой код команды) для уведомления thread2? Поток 2 просто ожидает каких-либо данных в очереди в режиме блокировки, для каждого нового сообщения, проверяет его на предмет обновления статуса или данных и выполняет соответствующие действия.

2

По вопросам рекламы [email protected]