二 Linux--多线程( 六 )

运行结果如下:

二 Linux--多线程

文章插图
值得注意的是pthread_cond_wait在阻塞的时候,会释放已经掌握的互斥锁,等到被唤醒的时候,重新上锁 。
举个例子:
二 Linux--多线程

文章插图
其实pthread_cond_wait内部隐藏一次解锁的过程,如果是fun1先运行,num被上锁,会阻塞在第24条语句,但是pthread_cond_wait会先解锁,释放掉num资源,但依然阻塞在24行,此时fun2加锁,改变条件,函数pthread_cond_signal会唤醒pthread_cond_wait函数,此时num会再次被上锁,然后解锁,所以pthread_cond_wait其实在内部做了一次解锁的操作 。
条件变量其实很简单,遇到pthread_cond_wait线程就会阻塞在阻塞队列,当pthread_cond_signal调用的时候,就会唤醒在阻塞队列中的线程,继续执行下面的代码 。

经验总结扩展阅读