条件变量 | 信号量 | |
---|---|---|
线程 | 进程,线程 | |
PV操作 | ||
需要和互斥锁结合 | ||
头文件 | pthread.h | semaphore.h 或者sys/sem.h |
似乎以前看过的一本操作系统教程没有讲过线程间同步,而PV操作对应的是信号量。
但是生产者和消费者的很多例子是基于线程的,而开始学的时候生产者消费者的PV操作是进程间的,而且PV操作和java中的wait(),notify()这套是不同的,所以这个地方经常混淆。
semaphore.h 和sys/sem.h的区别:
https://zhidao.baidu.com/question/331639808.html
http://blog.youkuaiyun.com/gatieme/article/details/50994533
总结一下,大概就是semaphore.h是POSIX标准,更易用。
semaphore.h可以定义有名信号量和无名信号量,感觉和有名管道无名管道的关系类似。有名信号量可以在其他进程中取到,然后做进程间通信。无名大概只能用在线程间通信。
另外一点,有提供读写锁的功能的信号量,读写信号量。
信号量:
sys/sem.h:
http://blog.youkuaiyun.com/ljianhui/article/details/10243617
条件变量:
https://www.cnblogs.com/charlesblc/p/6143397.html