06 | 锁:如何根据业务场景选择合适的锁?
原文摘抄
当你无法判断锁住的代码会执行多久时,应该首选互斥锁,互斥锁是一种独占锁。
如果你能确定被锁住的代码执行时间很短,就应该用自旋锁取代互斥锁。
对于 99% 的线程级互斥锁而言,阻塞都是由操作系统内核实现的(比如 Linux 下它通常由内核提供的信号量实现)
自旋锁比互斥锁快得多,因为它通过 CPU 提供的 CAS 函数(全称 Compare And Swap),在用户态代码中完成加锁与解锁操作。
CAS 忙等待
while (true) {
//因为判断lock变量的值比CAS操作更快,所以先判断lock再调用CAS效率更高
if (lock == 0 && CAS