本文大致说明自旋锁的特点及优势。
自旋锁是与互斥量类似,但它不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等状态。
自旋锁适用于:锁被持有的时间短,而且线程不希望在重新调度上花费太多的成本。
曾经有个经典的例子来比喻自旋锁:A,B两个人合租一套房子,共用一个厕所,那么这个厕所就是共享资源,且在任一时刻最多只能有一个人在使用。当厕所闲置时,谁来了都可以使用,当A使用时,就会关上厕所门,而B也要使用,但是急啊,就得在门外焦急地等待,急得团团转,是为“自旋”,这也是要求锁的持有时间尽量短的原因!
自旋锁的特点:
· 用于临界区互斥;
· 在任何时刻最多只能有一个执行单元获得锁;
· 要求持有锁的处理器所占用的时间尽可能短;
· 等待锁的线程进入忙循环(自旋);
自旋锁与互斥锁的优势
休眠与忙循环:
自旋锁不会使线程状态发生变化,不会使线程进入阻塞状态,这就减少了不必要的上下文切换;而互斥锁使得等待线程处于休眠状态,从而进入内核态,当获取锁的时候需要从内核态回复,需要上下文切换。
【参考】
[1] 《UNIX环境高级编程》
欢迎转载,转载请注明出处wenmingxing 自旋锁