Это общий вопрос. Например, в настоящее время два дочерних потока называются pthread_cond_wait(&cond1,&mutex)
, и они оба ждут. Затем родительский поток вызывает
pthread_cond_signal(&cond1);
pthread_cond_signal(&cond1);
Далее, мой вопрос: гарантировано ли, что оба из двух ожидающих потоков будут разбужены? (Предположим, что первый поток разбудил выпуски mutex позже на определенном этапе выполнения, чтобы второй поток мог его получить).
Причина, по которой я задаю этот вопрос, заключается в том, что для сигнала уровня системы unix сигнал (скажем, SIGCHLD) не поставлен в очередь, так что несколько сигналов одного типа могут быть потеряны, если они будут доставлены последовательно. Поэтому я удивляюсь, что pthread_cond_signal реализован по-разному, так что они не потеряются, если планировщик будет пропускать сигнал родительского потока дважды подряд?