wait是否完全安全

wait是否完全安全

在我的堆栈中有一段代码在等待pthread cond_wait。向同一进程发送信号,但信号处理程序中没有“pthread cond_signal”代码来通知pthread cond_wait,但pthread cond_wait仍然被释放。还有一些线程通常会执行“pthread cond_wait”来释放等待,但目前没有一个线程处于活动状态。

最佳答案

pthread_cond_wait()可以在任何时候醒来,即使它还没有发出信号。
这被称为“虚假唤醒”,正确的代码必须处理这一点-在大多数情况下,正确的调用pthread_cond_wait()的方式是在如下循环结构中:

while (!condition_waiting_for)
    pthread_cond_wait(&cond, &mutex);

其中condition_waiting_for是程序共享状态的条件,即线程正在等待变为true(例如,“作业队列不为空”)。
当您这样构造您的pthread_cond_wait()调用时,虚假唤醒(包括可能由信号引起的唤醒)不会影响程序的正确性。

关于android - pthread_cond_wait是否完全安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45920871/

10-10 18:32