跟sigsuspend很相似的一个东西是posix 条件变量
sigsuspend(配合sigprocmask)用来处理由信号修改的临界区,而posix条件变量用来处理由互斥锁保护的临界区。
mutex用来加锁,而cond用来同步,之所以cond要配合mutex使用,原因跟sigsuspend一样,考虑两者无关的情况:
- pthread_muxte_lock
- 测试变量
- 发现变量条件不满足,pthread_mutex_unlock
- pthread_cond_wait
假如3和4之间变量的值发生了变化,满足了条件(pthread_cond_signal)并且这个值以后不再变化的话,那么phread_cond_wait就失去对这个情况的监控,永远等待下去。
按照我的理解,pthread_cond_wait大概是这样工作的:
- pthread_mutex_lock
- 测试变量
- 条件不满足,调用pthread_cond_wait, 其内部:
a. 解锁mutex
b. 等待条件满足(pthread_cond_signal)
c. 锁定mutex, 返回 - 干活……
- pthread_mutex_unlock
……感觉我有点明白了多年前一直难以理解的gdk_threads_enter和gdk_threads_leave了……