竞争资源时,总有进程获得对象,而对于没获得资源的进程的处理就有各种不同的解决方法了,我们可以使没获得锁的进程
- 一直循环在那里看是否该自旋锁的保持者已经释放了锁,这就是自旋锁,它不用将进程阻塞
- 也可以使进程阻塞自己,请求OS调度另一个线程上处理器,这就是互斥锁
自旋锁原理
跟互斥锁一样,一个执行单元要想访问被自旋锁保护的共享资源,必须先得到锁,在访问完共享资源后,必须释放锁。如果在获取自旋锁时,没有任何执行单元保持该锁,那么将立即得到锁;如果在获取自旋锁时锁已经有保持者,那么获取锁操作将自旋在那里,直到该自旋锁的保持者释放了锁。
这样可能导致会占用过多的CPU资源,如果不加限制,单cpu的时候自旋锁会让其它process动不了
自旋锁比较适用于锁使用者保持锁时间比较短的情况。正是由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。
应用
CAS(LOCK前缀指令)、原子包
网友评论