多线程编程指南

唤醒丢失问题

如果线程未持有与条件相关联的互斥锁,则调用 pthread_cond_signal()pthread_cond_broadcast() 会产生唤醒丢失错误。

满足以下所有条件时,即会出现唤醒丢失问题:

仅当修改所测试的条件但未持有与之相关联的互斥锁时,才会出现此问题。只要仅在持有关联的互斥锁同时修改所测试的条件,即可调用 pthread_cond_signal()pthread_cond_broadcast(),而无论这些函数是否持有关联的互斥锁。