1、自旋锁spinlock
自旋锁广泛应用于多处理器多线程场景中,线程通过busy-wait-loop的方式获取锁,在任一时刻,只有一个线程可以获得锁,其他线程需要忙等待直到获得锁。通常情况下,要求spinlock的临界区尽量简短,且临界区中不能有显示或隐式的系统调用。
2、与mutex的对比
spinlock不会导致线程的状态发生切换(用户态->内核态);mutex获取不到锁时会选择sleep。
mutex获取锁分为两个阶段,第一阶段在用户态采用spinlock锁总线的方式获取一次锁,如果成功获得锁则立即返回;否则进入第二阶段,调用系统的futex锁sleep,当锁可用后被唤醒,继续竞争锁。
spinlock优缺点:
spinlock没有昂贵的系统调用,执行速度快;但是自旋锁一直占用CPU,且在执行过程中会锁bus总线,锁总线时其他处理器无法使用总线。
mutex优缺点:
mutex不会忙等,得不到锁时会sleep;但是sleep时会陷入内核态。
点击打开链接
转载请注明原文地址: https://ju.6miu.com/read-900234.html