本文大致說明自旋鎖的特點(diǎn)及優(yōu)勢(shì)辆影。
自旋鎖是與互斥量類似,但它不是通過休眠使進(jìn)程阻塞锯蛀,而是在獲取鎖之前一直處于忙等狀態(tài)。
自旋鎖適用于:鎖被持有的時(shí)間短旁涤,而且線程不希望在重新調(diào)度上花費(fèi)太多的成本迫像。
曾經(jīng)有個(gè)經(jīng)典的例子來比喻自旋鎖:A,B兩個(gè)人合租一套房子侵蒙,共用一個(gè)廁所,那么這個(gè)廁所就是共享資源纷闺,且在任一時(shí)刻最多只能有一個(gè)人在使用。當(dāng)廁所閑置時(shí)氓轰,誰來了都可以使用,當(dāng)A使用時(shí)署鸡,就會(huì)關(guān)上廁所門限嫌,而B也要使用,但是急啊怒医,就得在門外焦急地等待,急得團(tuán)團(tuán)轉(zhuǎn)稚叹,是為“自旋”,這也是要求鎖的持有時(shí)間盡量短的原因塞茅!
自旋鎖的特點(diǎn):
· 用于臨界區(qū)互斥;
· 在任何時(shí)刻最多只能有一個(gè)執(zhí)行單元獲得鎖野瘦;
· 要求持有鎖的處理器所占用的時(shí)間盡可能短飒泻;
· 等待鎖的線程進(jìn)入忙循環(huán)(自旋)啊掏;
自旋鎖與互斥鎖的優(yōu)勢(shì)
休眠與忙循環(huán):
自旋鎖不會(huì)使線程狀態(tài)發(fā)生變化衰猛,不會(huì)使線程進(jìn)入阻塞狀態(tài)刹孔,這就減少了不必要的上下文切換啡省;而互斥鎖使得等待線程處于休眠狀態(tài)髓霞,從而進(jìn)入內(nèi)核態(tài),當(dāng)獲取鎖的時(shí)候需要從內(nèi)核態(tài)回復(fù)方库,需要上下文切換。
【參考】
[1] 《UNIX環(huán)境高級(jí)編程》
歡迎轉(zhuǎn)載徐鹤,轉(zhuǎn)載請(qǐng)注明出處wenmingxing 自旋鎖