mutex和spin锁

mutex和spinlock都是用于多进程/线程间访问公共资源时保持同步用的。

mutex获取锁失败后则进入sleep并等待其他线程运行。待获取锁的线程释放锁后将其唤醒。

spinlock获取锁失败后开始轮询等待该锁直到成功。

spinlock多用于内核。通常来说,多核条件下如果线程获取锁的时间很短,小于两个上下文切换的时间则采用spinlock。否则采用mutex,获取锁失败则sleep放弃cpu执行权(sleep只放弃cpu的执行权但并没有释放锁,wait方法会释放锁)。

当前由于代码的重用性高,多核和单核情况复杂,出现了混合mutex和混合spin。

混合mutex在多核情况下先轮询,轮询一段时间仍未果则sleep。单核直接sleep。

混合spin也是先轮询,轮询一段时间未果则stop。stop是正常的进程调度,应该会比先让thread sleep然后再wake up的开销小一些。

参考如下:

mutex 和 spinlock 对比

你可能感兴趣的:(mutex和spin锁)