iOS中自旋鎖與互斥鎖的區(qū)別

首先借鑒一張ibireme各種鎖性能對(duì)比圖鎮(zhèn)樓

性能對(duì)比

自旋鎖與互斥鎖的區(qū)別

從實(shí)現(xiàn)原理上來講,互斥鎖屬于sleep-waiting類型的鎖。例如在一個(gè)雙核的機(jī)器上有兩個(gè)線程(線程A和線程B),它們分別運(yùn)行在Core0和 Core1上。假設(shè)線程A想要通過pthread_mutex_lock操作去得到一個(gè)臨界區(qū)的鎖,而此時(shí)這個(gè)鎖正被線程B所持有,那么線程A就會(huì)被阻塞 (blocking)脓匿,Core0 會(huì)在此時(shí)進(jìn)行上下文切換(Context Switch)將線程A置于等待隊(duì)列中,此時(shí)Core0就可以運(yùn)行其他的任務(wù)(例如另一個(gè)線程C)而不必進(jìn)行忙等待宦赠。而Spin lock則不然陪毡,它屬于busy-waiting類型的鎖米母,如果線程A是使用pthread_spin_lock操作去請(qǐng)求鎖,那么線程A就會(huì)一直在 Core0上進(jìn)行忙等待并不停的進(jìn)行鎖請(qǐng)求毡琉,直到得到這個(gè)鎖為止铁瞒。

自旋鎖與互斥鎖有點(diǎn)類似,只是自旋鎖不會(huì)引起調(diào)用者睡眠桅滋,如果自旋鎖已經(jīng)被別的執(zhí)行單元保持慧耍,調(diào)用者就一直循環(huán)在那里看是 否該自旋鎖的保持者已經(jīng)釋放了鎖。

總結(jié)
  自旋鎖會(huì)忙等: 所謂忙等丐谋,即在訪問被鎖資源時(shí)芍碧,調(diào)用者線程不會(huì)休眠,而是不停循環(huán)在那里号俐,直到被鎖資源釋放鎖泌豆。
  互斥鎖會(huì)休眠: 所謂休眠,即在訪問被鎖資源時(shí)吏饿,調(diào)用者線程會(huì)休眠踪危,此時(shí)cpu可以調(diào)度其他線程工作。直到被鎖資源釋放鎖猪落。此時(shí)會(huì)喚醒休眠線程陨倡。

優(yōu)缺點(diǎn)
  自旋鎖的優(yōu)點(diǎn)在于,因?yàn)樽孕i不會(huì)引起調(diào)用者睡眠许布,所以不會(huì)進(jìn)行線程調(diào)度,cpu時(shí)間片輪轉(zhuǎn)等耗時(shí)操作绎晃。所有如果能在很短的時(shí)間內(nèi)獲得鎖蜜唾,自旋鎖的效率遠(yuǎn)高于互斥鎖。
  缺點(diǎn)在于庶艾,自旋鎖一直占用CPU袁余,他在未獲得鎖的情況下,一直運(yùn)行--自旋咱揍,所以占用著CPU颖榜,如果不能在很短的時(shí) 間內(nèi)獲得鎖,這無疑會(huì)使CPU效率降低煤裙。自旋鎖不能實(shí)現(xiàn)遞歸調(diào)用掩完。

pthread_mutex 表示互斥鎖∨鹋椋互斥鎖可以傳入不同參數(shù)且蓬,實(shí)現(xiàn)遞歸鎖pthread_mutex(recursive)。NSLock题翰,NSCondition恶阴,NSRecursiveLock诈胜,NSConditionLock都是內(nèi)部封裝的pthread_mutex,即都屬于互斥鎖冯事。@synchronized是NSLock的一種封裝焦匈,犧牲了效率,簡潔了語法昵仅。

OSSpinLock 表示自旋鎖缓熟,從上圖可以看到自旋鎖的效率最高,但是現(xiàn)在的iOS因?yàn)閮?yōu)先級(jí)反轉(zhuǎn)的問題岩饼,已經(jīng)不安全荚虚,所以推薦使用pthread_mutex或者dispatch_semaphore。

具體各種鎖的內(nèi)部實(shí)現(xiàn)等詳情籍茧,參考: 深入理解iOS開發(fā)中的鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末版述,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寞冯,更是在濱河造成了極大的恐慌渴析,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吮龄,死亡現(xiàn)場離奇詭異俭茧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漓帚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門母债,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尝抖,你說我怎么就攤上這事毡们。” “怎么了昧辽?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵衙熔,是天一觀的道長。 經(jīng)常有香客問我搅荞,道長红氯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任咕痛,我火速辦了婚禮痢甘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茉贡。我一直安慰自己产阱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布块仆。 她就那樣靜靜地躺著构蹬,像睡著了一般王暗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庄敛,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天俗壹,我揣著相機(jī)與錄音,去河邊找鬼藻烤。 笑死绷雏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怖亭。 我是一名探鬼主播涎显,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兴猩!你這毒婦竟也來了期吓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤倾芝,失蹤者是張志新(化名)和其女友劉穎讨勤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晨另,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潭千,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了借尿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刨晴。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖路翻,靈堂內(nèi)的尸體忽然破棺而出割捅,到底是詐尸還是另有隱情,我是刑警寧澤帚桩,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站嘹黔,受9級(jí)特大地震影響账嚎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜儡蔓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一郭蕉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喂江,春花似錦召锈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拐袜。三九已至,卻和暖如春梢薪,著一層夾襖步出監(jiān)牢的瞬間蹬铺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工秉撇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甜攀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓琐馆,卻偏偏與公主長得像规阀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘦麸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容