互斥锁、读写锁、自旋锁与无锁算法应如何选择
简答题中等410 次浏览
参考答案与解析
# 核心结论
同步机制的选择应同时考虑正确性、竞争强度、临界区长度、线程是否可能被抢占、操作是否会阻塞以及维护成本。互斥锁适合需要独占修改、临界区不够短或其中可能发生调度等待的普通业务场景;读写锁只在读取显著多于写入、读临界区具有一定工作量且公平策略合适时可能占优;自旋锁适合临界区极短且预期等待时间小于线程睡眠和唤醒成本的底层场景;无锁算法适合对尾延迟和系统级进展有严格要求、团队又能承担复杂证明与内存回收成本的场景。不存在始终最快的同步机制,应先选择最容易证明正确的方案,再基于真实负载测量优化。
# 底层机制
互斥锁通常先通过原子操作尝试占有锁,竞争较轻时可走用户态快速路径;竞争持续时,等待线程可能进入队列并由操作系统阻塞
