一、區別
1.實作方式上的區別:互斥鎖是基于自旋鎖實作的,所以自旋鎖相較于互斥鎖更加底層,
2.開銷上的區別:獲取不到互斥鎖時會發生背景關系切換并休眠,而自旋鎖則“自旋”在原地直到被獲取,
3.使用場景的區別:互斥鎖只能在進(線)程中使用,不能在中斷里使用,而自旋鎖可以在中斷里使用,
4.使用方式上區別:互斥鎖只能由獲取到該鎖的進(線)程來釋放,而自旋鎖沒有這個限制,但上鎖和解鎖一般都是成對使用的,
二、選用原則
根據上述區別可得出以下三條選用原則:
1.當需要保護的臨界區較小時,宜選用自旋鎖,否則選用互斥鎖,因為當鎖不能被獲取到時,互斥鎖的開銷是背景關系切換,背景關系切換的開銷是很大的,但當臨界區執行時間的開銷大于背景關系切換的開銷時,就適合使用互斥鎖了,這種情況下使用自旋鎖會讓CPU空轉直到其他執行單元解鎖為止(還不如發生一次背景關系切換),降低了系統效率,
2.自旋鎖保護的臨界區不能有引起切換背景關系(休眠)的函式,但互斥鎖可以,若自旋鎖保護的臨界區發生背景關系切換,而切換背景關系后執行的進(線)程又來獲取該自旋鎖,這樣就必然會導致死鎖的發生,另外,互斥鎖保護的臨界區也應該盡量避免阻塞(例如請求另外一個互斥鎖),否則也容易出現死鎖的情況,
3.如果被保護的臨界區處于中斷里,那么只能使用自旋鎖,因為互斥鎖可能會導致阻塞,而中斷是不能被阻塞的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202900.html
標籤:其他
上一篇:CentOS手把手教你搭建Zabbix Server,Zabbix Proxy,Zabbix Agent企業級監控平臺
