iOS-GCD死鎖

  NSLog(@"1"); // 任務1
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2"); // 任務2
    });

所謂死鎖,通常指有兩個線程A和B都卡住了,A在等B ,B在等A,相互等待對方完成某些操作。A不能完成是因為它在等待B完成。但B也不能完成,因為它在等待A完成。于是大家都完不成,就導致了死鎖(DeadLock)。

死鎖原因
dispatch_sync是同步的,本身就會阻塞主線程,需要等待任務2完成,而任務2需要在主線程中完成,但是dispatch_sync阻塞了主線程,相互等待,造成死鎖

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Queue (隊列): 分為串行和并行, 串行隊列按順序開始執行, 執行完上一個才能執行下一個. 并行隊列(開始也...
    丹單當閱讀 596評論 0 0
  • 死鎖一直都是在使用多線程時,需要注意的一個問題。以前對同步、異步,串行、并行只有一個模糊的概念,想想也是時候整理一...
    船長One閱讀 1,510評論 0 5
  • 目錄 一、基本概念1.多線程2.串行和并行, 并發3.隊列與任務4.同步與異步5.線程狀態6.多線程方案 二、GC...
    BohrIsLay閱讀 1,612評論 5 12
  • 關鍵字:串行,并行,同步,異步,阻塞,死鎖。作者:周輝All rights reserved. 同步(dispat...
    FaiChou閱讀 899評論 4 8
  • GCD的基本使用 一、主隊列介紹 主隊列:是和主線程相關聯的隊列,主隊列是GCD自帶的一種特殊的串行隊列,放在主隊...
    GitHubPorter閱讀 649評論 3 4