IOS-GCD一種死鎖情況分析

問題分析:主線程執(zhí)行下面方法,這種情況為什么會(huì)死鎖?

-(void)viewDidLoad

{

dispatch_sync(dispatch_get_main_queue(),block());

}

1.理解dispatch_sync dispatch_async 的工作流程

dispatch_sync(queue,block) 做了兩件事:

1)將block添加到queue隊(duì)列中

2)阻塞調(diào)用線程,等待block()執(zhí)行結(jié)束,回到調(diào)用線程。

dispatch_async(queue,block) 做了兩件事

1)將block添加到queue隊(duì)列;

2)直接回到調(diào)用線程(不阻塞調(diào)用線程)。

2.當(dāng)在main_thread中調(diào)用dispatch_sync 時(shí):

1)main_thread被阻塞,無法繼續(xù)執(zhí)行;

2)同步派發(fā)sync導(dǎo)致block()需要在main_thread中執(zhí)行結(jié)束才回返回;

3)而此時(shí)main_thread被阻塞,二者相互等待,死鎖。

所以:不要講block同步派發(fā)到調(diào)用gcd所在線程的關(guān)聯(lián)隊(duì)列中。

其他的queue也是類似的,把當(dāng)前正在執(zhí)行的queue阻塞,還想要在那個(gè)queue執(zhí)行代碼,就會(huì)死鎖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄(GCD): 關(guān)鍵詞 混淆點(diǎn) 場(chǎng)景應(yīng)用 總結(jié) 1. 關(guān)鍵詞 線程概念: 獨(dú)立執(zhí)行的代碼段,一個(gè)線程同時(shí)間只能執(zhí)...
    Ryan___閱讀 1,365評(píng)論 0 3
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個(gè)最簡(jiǎn)單的問題,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,903評(píng)論 1 17
  • iOS中GCD的使用小結(jié) 作者dullgrass 2015.11.20 09:41*字?jǐn)?shù) 4996閱讀 20199...
    DanDanC閱讀 1,276評(píng)論 0 0
  • 本篇博客共分以下幾個(gè)模塊來介紹GCD的相關(guān)內(nèi)容: 多線程相關(guān)概念 多線程編程技術(shù)的優(yōu)缺點(diǎn)比較? GCD中的三種隊(duì)列...
    有夢(mèng)想的老伯伯閱讀 1,085評(píng)論 0 4
  • 記得當(dāng)年離開 路上你來電話 說要和我私奔 把你留在原地 火車開往北方 不見你的身影 我灑一路熱淚 過了這么多年 眼...
    林嘉梓閱讀 599評(píng)論 33 41

友情鏈接更多精彩內(nèi)容