Я успешно реализовал поток производителя и 2 рабочих потока или потока потребителя.
Поток производителя передает условие, используя pthread_cond_broadcast.И рабочие потоки блокируются pthread_cond_wait.
Код выглядит примерно так:
Поток 1 (Поток производителя):
pthread_mutex_lock
pthread_cond_broadcast
pthread_mutex_unlock
Поток 2 (Работник / Потребитель)Поток):
work = 1
while(1)
{
pthread_mutex_lock
while(!work)
{
work = 1;
pthread_cond_wait
}
// Thread operation
work = 0;
pthread_mutex_unlock
}
Поток 3 (рабочий / потребительский поток):
work = 1
while(1)
{
pthread_mutex_lock
while(!work)
{
work = 1;
pthread_cond_wait
}
// Thread operation
work = 0;
pthread_mutex_unlock
}
Мой вопрос: почему поток 2 или поток 3 не выполняет себя повторно?
Другими словами, когда условие транслировалось потоком 1, допустим, что поток 2 сначала разблокирует условие, выполняет операцию потока, вызывает thread_cond_wait и блокирует себя.
Теперь поток 3 разблокирует условие,выполняет операцию с потоком, вызывает thread_cond_wait и блокирует себя.
В этот момент оба потока блокируются в ожидании условия, поэтому происходит ли сброс переменной условия?Если да, то как он знает, когда нужно выполнить сброс, поскольку вместо 2-х рабочих потоков у меня может быть 5 рабочих потоков?
Почему нить 2 и нить 3 снова не разблокируются для одного и того же состояния?
Я хотел знать внутренний механизм, о том, как потоки разблокируются для определенного условия только один раз, а не снова, пока не будет отправлено новое сообщение.
Я попытался прочитать об этом, но всеЯ мог видеть, что при отправке широковещания условия все потоки, ожидающие этого условия, разблокируются.Я не понимаю, почему один и тот же поток не разблокируется для одного и того же состояния несколько раз?
Я попытался посмотреть на pthread_cond_t, но не смог получить никакой подсказки.
Любая помощьили предложение о том, что мне не хватает или я думаю неправильно, будет оценено.
Спасибо