自旋锁和互斥锁
自旋锁和互斥锁
-
自旋锁和互斥锁一样,都是为了解决对某种资源的互斥访问。
-
自旋锁和互斥锁的区别: 自旋锁:如果资源已经被占用,调用线程不会进入休眠(一直处于激活状态),而是在循环等待,直到获取到被占用资源。 互斥锁:如果资源已经被占用,调用线程进入休眠状态,获取到锁的时候需要从内核态恢复,需要线程上下文切换。
-
自旋锁不会使线程状态发生切换,一直处于用户态,即线程一直都是active的;不会使线程进入阻塞状态,减少了不必要的上下文切换,执行速度快 非自旋锁在获取不到锁的时候会进入阻塞状态,从而进入内核态,当获取到锁的时候需要从内核态恢复,需要线程上下文切换。 (线程被阻塞后便进入内核(Linux)调度状态,这个会导致系统在用户态与内核态之间来回切换,严重影响锁的性能)
-
可重入自旋锁和不可重入自旋锁
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 银河驿站
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果