桥下红药

以无心之心读书

自旋锁和互斥锁的区别

总分类 0 评

听名字是很怪异的,都是锁很明显就是防止多个线程操作共享数据出现脏读等情况发生,那么肯定是互斥的啊。

1. 自旋锁

在当前锁已经被别的线程获取了,现在的线程需要等待别的线程使用完释放锁,自旋的含义和轮询很像,就是当前线程不休眠,而是不停的尝试获取锁。

2. 互斥锁

和上面的不一样的就是 锁已经被别的线程获取了,当前线程会休眠,等到锁释放通知然后唤醒当前线程。


讲道理来说,自旋锁这个机制很明显就是浪费资源嘛,肯定是互斥锁的机制更优秀。那么问题来了,世界上就没有百分百优秀的解决方案,既想好又想便宜…. 如果互斥锁这么好就不会有自旋锁现在还存着。这个要看场景来说,利弊权衡,互斥锁的唤醒线程会在操作系统进行一些上下文的初始化操作吧,如果这个时间超过了自旋锁轮询的时长就很明显用自旋锁更合适。如果锁住的代码很多等别的线程释放锁较慢 互斥锁就更好。

当然了只要是加锁了确实是增加了CPU的消耗。

ps:计算机的运行快慢…人是感觉不出来,锁 100 行代码 和 1000 行代码谁还能感知到速度吗

上一篇

发表评论