1. 程式人生 > >GCD的簡陋瞭解+目前對於死鎖的極簡陋理解

GCD的簡陋瞭解+目前對於死鎖的極簡陋理解

參考文章(這篇文章寫的極其好,大家看就對了)

參考的GitHub地址

關於死鎖

  • 首先一句話確定死鎖發生的前提:在當前執行緒新增同步任務到當前執行緒的任務佇列就會造成死鎖
  • 在區分幾個定義:
    • 執行緒可以比作公路,將東西從A運到B的時候可以走多條公路同時運,也就是非同步+併發
    • 那佇列呢其實就是一個長條貨車,上面運著許多貨物(任務)
    • 總結下就是,執行緒上跑佇列,佇列是任務的集合
  • 非常難搞的一個點
    • 同步執行 + 序列佇列 = 不會死鎖
      • 在當前執行緒新增同步任務到當前執行緒的任務佇列就會造成死鎖,在新增序列佇列的時候我們是在主佇列裡新增,而序列佇列裡的任務執行又是在新的序列佇列裡,到這裡在好好分清楚上面是佇列,什麼是執行緒
    • 同步執行 + 主佇列 = 死鎖
      • 這個首先,我們dispatch是一個任務,要在主佇列裡執行,而這個想結束的前提就是將塊裡的任務執行完畢, 而不幸的是,塊裡任務不像上一個是在新的佇列裡執行,而是同樣在主佇列裡執行,在他的全面還排著一個任務,要等他完成了才能繼續,這就導致雙方互相等待,造成死鎖