自旋锁

来源:互联网 发布:青山长源软件 编辑:程序博客网 时间:2024/05/16 11:45

自旋锁:

          自旋锁最多只能被一个可执行单元持有,自旋锁不会引起调用者睡眠

          如果一个执行线程试图获得一个已经被持有的自旋锁,那么线程就会一直进行忙碌环,一直等待下去

          在那里看是否该自旋锁的保持者已经释放了锁,“ 自旋 ” 就是这个意思.


初始化自旋锁 spin_lock_init ( x ):

          spin_lock_init ( x )

          该宏用于 初始化自旋锁 x,自旋锁在使用前必须先初始化.


获取自旋锁 spin_lock( lock )   spin_trylock( lock ) :

          spin_lock ( lock )

          获取自旋锁 lock ,如果成功,立即获得锁,并马上返回,否则它将一直自旋在那里,直到该自旋锁的

          保持者释放.

          spin_trylock ( lock )

          试图获取自旋锁 lock ,如果能立即获得锁,并返回真,

          否则立即返回假, 它不会一直等待被释放.


释放自旋锁 spin_unlock ( lock ):

          spin_unlock ( lock )

          释放自旋锁 lock ,它与 spin_trylock 或 spin_lock 配对使用.


信号量 PK  自旋锁:

           信号量是睡眠锁,自旋锁是忙等锁.

          1,信号量可能允许多个持有者,而自旋锁在任何时候只能允许一个持有者.

                当然也有信号量叫互斥信号量 ( 只能有一个持有者 ),允许有多个持有者的信号量计数信号量.

          2,信号量适合于保持时间长的情况;而自旋锁适合于保持时间非常短的情况.

                在实际应用中,自旋锁控制的代码只有几行,而持有自旋锁的时间也一般不会超过两次上下文

                切换的时间,因为线程一旦要进行切换,就至少花费切出切入两次,自旋锁的占用时间如果远

                远长于两次上下文切换 ,我们就应该选择信号量.

0 0