自旋锁spinlock

来源:互联网 发布:java soa是什么 编辑:程序博客网 时间:2024/06/05 02:37

1、自旋锁spinlock

自旋锁广泛应用于多处理器多线程场景中,线程通过busy-wait-loop的方式获取锁,在任一时刻,只有一个线程可以获得锁,其他线程需要忙等待直到获得锁。通常情况下,要求spinlock的临界区尽量简短,且临界区中不能有显示或隐式的系统调用。

2、与mutex的对比

spinlock不会导致线程的状态发生切换(用户态->内核态);mutex获取不到锁时会选择sleep。

mutex获取锁分为两个阶段,第一阶段在用户态采用spinlock锁总线的方式获取一次锁,如果成功获得锁则立即返回;否则进入第二阶段,调用系统的futex锁sleep,当锁可用后被唤醒,继续竞争锁。

spinlock优缺点:

spinlock没有昂贵的系统调用,执行速度快;但是自旋锁一直占用CPU,且在执行过程中会锁bus总线,锁总线时其他处理器无法使用总线。

mutex优缺点:

mutex不会忙等,得不到锁时会sleep;但是sleep时会陷入内核态。


点击打开链接

0 0
原创粉丝点击