// 創(chuàng)建一個信號量,初始值為3,表示同時最多允許3個任務(wù)并發(fā)執(zhí)行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
// 創(chuàng)建一個dispatch group
dispatch_group_t group = dispatch_group_create();
// 創(chuàng)建一個全局并發(fā)隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 添加第一個任務(wù)到group
dispatch_group_async(group, queue, ^{
dispatch_group_enter(group);
// 等待信號量,如果信號量為0,則此任務(wù)將被阻塞
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// 模擬任務(wù)執(zhí)行時間
for (int i = 0; i < 20; ++i) {
[NSThread sleepForTimeInterval:2]; // 模擬耗時操作
NSLog(@"Task 1 --- %@", [NSThread currentThread]); // 打印當前線程
}
// 任務(wù)完成后,釋放信號量
dispatch_semaphore_signal(semaphore);
// 離開group
dispatch_group_leave(group);
});
// 添加第二個任務(wù)到group
dispatch_group_async(group, queue, ^{
dispatch_group_enter(group);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
for (int i = 0; i < 20; ++i) {
[NSThread sleepForTimeInterval:2]; // 模擬耗時操作
NSLog(@"Task 2 --- %@", [NSThread currentThread]); // 打印當前線程
}
dispatch_semaphore_signal(semaphore);
dispatch_group_leave(group);
});
// 添加第三個任務(wù)到group
dispatch_group_async(group, queue, ^{
dispatch_group_enter(group);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
for (int i = 0; i < 20; ++i) {
[NSThread sleepForTimeInterval:2]; // 模擬耗時操作
NSLog(@"Task 3 --- %@", [NSThread currentThread]); // 打印當前線程
}
dispatch_semaphore_signal(semaphore);
dispatch_group_leave(group);
});
// 等待所有任務(wù)完成
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 所有文件都下載完成,執(zhí)行這里的代碼
NSLog(@"Task 所有文件都下載完成 --- %@", [NSThread currentThread]); // 打印當前線程
});
為GCD并發(fā)隊列設(shè)置最大并發(fā)數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 多線程原理(只有一個CPU的情況): 同一時間,CPU 只能處理1個線程,同一時間只有1個線程在執(zhí)行; 多線程同時...
- 不知道為什么,簡書圖片一直上傳失敗,所以如果有興趣移步掘金看下。具體詳見掘金: https://juejin.cn...
- 1、多線程操作同一數(shù)據(jù)進行 多讀單寫 線程安全控制;2、多線程執(zhí)行不同任務(wù)的前后時序控制; 思考一個問題,串行隊列...
- 1.主隊列 1.1同步函數(shù) + 主隊列 同步函數(shù) 任務(wù)放入主隊列 會阻塞主隊列 1.2異步函數(shù) + 主隊列 異步函...
- 首先感謝行走的少年郎寫的一篇文章《iOS多線程--徹底學會多線程之『GCD』》它讓我對GCD的許多概念有了清晰的理...