信号量、互斥锁和条件变量的区别

这个问题我当时遇到时还真心不知道到底有什么区别,后来看了一下UNPv2中stevens的解释,明白了点

1. 互斥锁必须总是由给它上锁的线程解锁,而信号量的
    wait和post操作不必由同一个线程执行
2. 互斥锁要么被锁住,要么被解开,和二值信号量类似
3. 条件变量在发送信号时,如果没有线程等待在该条件
    变量上,那么信号将丢失;而信号量有计数值,每次
    信号量post操作都会被记录
4. sem_post是各种同步技巧中,唯一一个能在信号处理
    程序中安全调用的函数
5. 互斥锁是为上锁而优化的;条件变量是为等待而优化的;
    信号量既可用于上锁,也可用于等待,因此会有更多的
    开销和更高的复杂性 

你可能感兴趣的:(信号量、互斥锁和条件变量的区别)