自旋锁的原理:
自旋锁与普通的锁以及信号量不同,使用普通的锁和信号量在访问资源必须等待的时候操作系统会先把等待的线程加入相应的锁的链表里,然后挂起该线程,挂起后直到有线程释放了对应的锁才有机会获得CPU。而自旋锁则不同,它在等待锁时会循环检测锁是否开启,这对于单处理器来说是浪费CPU,但是在多处理器环境下,不同cpu上的线程同时操作一段临界资源,如果操作只需要很短的时间,(比如改变一个变量的值)循环的代价会少于把线程加入锁的队列及线程切换的代价,这种情境下应该使用自旋锁。
自旋锁的应用条件:
1,临界的代码短;
2,多处理器;
当有大量线程依赖于一个锁时需谨慎思考临界代码占用的百分比