1. 程式人生 > 其它 >【Linux應用】自旋鎖和互斥鎖的區別

【Linux應用】自旋鎖和互斥鎖的區別

  總結自旋鎖和互斥鎖之間的區別,如下:

  • 實現方式的區別:互斥鎖是基於自旋鎖而實現的,所以自旋鎖相較於互斥鎖更加底層。
  • 開銷上的區別:獲取不到互斥鎖會陷入阻塞狀態(休眠),直到獲取到鎖時被喚醒;而獲取不到自旋鎖會在原地“自旋”,直到獲取到鎖;休眠和喚醒的開銷是很大的,所以互斥鎖的開銷遠高於自旋鎖、自旋鎖的效率遠高於互斥鎖;但如果長時間“自旋”等待,會使得CPU使用效率降低,故自旋鎖不用於等待時間比較長的情況。
  • 使用場景的區別:自旋鎖在使用者態應用程式中使用的比較少,通常在核心程式碼中使用的比較多;因為自旋鎖可以在中斷服務程式中使用,而互斥鎖則不行,在執行中斷服務程式時要求不能休眠、不能被搶佔(核心使用自旋鎖會自動禁止搶佔),一旦休眠意味著執行中斷服務函式時主動交出了CPU使用權,休眠結束時無法返回到中斷服務函式中,這樣就會導致死鎖。