条件变量的用法
Linux条件变量详解:http://c.biancheng.net/view/8633.html
里面提到:pthread_cond_wait()
函数会以“原子操作”的方式完成“阻塞线程+解锁”或者“重新加锁+解除阻塞”这两个过程(其他教程只提到了“阻塞线程+解锁”这一步是原子操作)。
条件变量难点解析
Linux 多线程条件变量同步:https://www.linuxidc.com/Linux/2016-11/136664.htm
关于linux条件变量的深入探讨:https://mp.weixin.qq.com/s/gPgo9JdjpuyopHXkoIOdzQ
里面提到:条件本身就是一个竞争资源,这个资源的作用是对其后程序正文的执行权,于是用一个锁来保护。这样就关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道,这样线程就不会有任何变化……条件变量这个变量其实本身不包含条件信息,条件的判断不在pthread_cond_wait函数功能中,而需要外面进行条件判断。这个条件通常是多个线程或进程的共享变量,这样就很清楚了,对于共享变量很可能产生竞争条件尤其还对共享变量加了条件限制,所以从这个角度看,必须对共享变量加上互斥锁。