互斥锁、读写锁、信号量与条件变量分别解决什么并发问题
简答题困难788 次浏览
参考答案与解析
# 核心结论
互斥锁、读写锁、信号量和条件变量解决的问题不同。互斥锁保护共享状态的不变量,保证同一时刻至多一个执行单元进入临界区;读写锁允许多个纯读操作并发,但写操作必须独占;信号量维护一定数量的许可,适合限制并发量、表达资源容量或累计事件;条件变量用于等待“受互斥锁保护的某个条件成立”。选择时应先判断需要保护的是复合状态、读写访问、资源数量还是状态变化,而不能简单比较哪一种更快。
# 底层机制
互斥锁保护的不是某一行代码,而是在加锁到解锁期间必须始终协调更新的一组共享状态。线程获得锁后检查并修改状态,在释放前恢复不变量。竞争较轻时,实现可能在用户态通过原子操作尝试获取;竞争较重时,等待者可能由内核挂起并在以后唤醒。所
