Linux教程

【Linux应用】自旋锁和互斥锁的区别

本文主要是介绍【Linux应用】自旋锁和互斥锁的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  总结自旋锁和互斥锁之间的区别,如下:

  • 实现方式的区别:互斥锁是基于自旋锁而实现的,所以自旋锁相较于互斥锁更加底层。
  • 开销上的区别:获取不到互斥锁会陷入阻塞状态(休眠),直到获取到锁时被唤醒;而获取不到自旋锁会在原地“自旋”,直到获取到锁;休眠和唤醒的开销是很大的,所以互斥锁的开销远高于自旋锁、自旋锁的效率远高于互斥锁;但如果长时间“自旋”等待,会使得CPU使用效率降低,故自旋锁不用于等待时间比较长的情况。
  • 使用场景的区别:自旋锁在用户态应用程序中使用的比较少,通常在内核代码中使用的比较多;因为自旋锁可以在中断服务程序中使用,而互斥锁则不行,在执行中断服务程序时要求不能休眠、不能被抢占(内核使用自旋锁会自动禁止抢占),一旦休眠意味着执行中断服务函数时主动交出了CPU使用权,休眠结束时无法返回到中断服务函数中,这样就会导致死锁。
这篇关于【Linux应用】自旋锁和互斥锁的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!