iOS多線程--GCD同步并行任務

問題

如何用GCD實現圖中要求:任務1、2、3并行;任務0等1、2、3都結束后執(zhí)行;任務4、5、6并行并且等任務0結束后才執(zhí)行 ?

方法一:group

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任務 1");
    });
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任務 2");
    });
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任務 3");
    });

dispatch_group_t group2 = dispatch_group_create();
//手動管理Group計數,必須配套dispatch_group_leave,計數減為零則觸發(fā)Notifiy;否則依賴該Group的block會直接執(zhí)行
dispatch_group_enter(group2); 
dispatch_group_notify(group, globalQueue, ^{
        dispatch_async(globalQueue, ^{
            NSLog(@"任務 0");
            dispatch_group_leave(group2);
        });
    });

dispatch_group_notify(group2, globalQueue, ^{
        dispatch_async(globalQueue, ^{
            NSLog(@"任務 4");
        });
        dispatch_async(globalQueue, ^{
            NSLog(@"任務 5");
        });
        dispatch_async(globalQueue, ^{
            NSLog(@"任務 6");
        });
    });

方法二:barrier

    dispatch_queue_t cocurrentQueue = dispatch_queue_create("concurrent queue", DISPATCH_QUEUE_CONCURRENT);
   dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 1");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 2");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 3");
    });
    dispatch_barrier_async(cocurrentQueue, ^{
        NSLog(@"任務 0");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 4");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 5");
    });
   dispatch_async(cocurrentQueue, ^{
        NSLog(@"任務 6");
    });

注意:barrier常配合并行隊列,但只是對自己創(chuàng)建的并行隊列有效,對于系統(tǒng)提供的全局并行隊列無效,可能蘋果是出于安全考慮而做了特殊處理

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

相關閱讀更多精彩內容

  • 目錄:iOS多線程(一)--pthread、NSThreadiOS多線程(二)--GCD詳解iOS多線程(三)--...
    Claire_wu閱讀 1,136評論 0 6
  • iOS 多線程系列 -- 基礎概述iOS 多線程系列 -- pthreadiOS 多線程系列 -- NSThrea...
    shannoon閱讀 988評論 0 2
  • 1. GCD簡介 什么是GCD呢?我們先來看看百度百科的解釋簡單了解下概念 引自百度百科:Grand Centra...
    千尋_544f閱讀 506評論 0 0
  • 本文首發(fā)于我的個人博客:「程序員充電站」[https://itcharge.cn]文章鏈接:「傳送門」[https...
    ITCharge閱讀 350,689評論 308 1,927
  • 北漂已七年,有空經常關注房價,每次看完都是一樣的結果,還是想想怎么多掙點錢吧! 感覺在掙錢的路上已迷失自我。。。
    在此之前閱讀 202評論 0 0

友情鏈接更多精彩內容