// 创建一个信号量,初始值为3,表示同时最多允许3个任务并发执行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
// 创建一个dispatch group
dispatch_group_t group = dispatch_group_create();
// 创建一个全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 添加第一个任务到group
dispatch_group_async(group, queue, ^{
dispatch_group_enter(group);
// 等待信号量,如果信号量为0,则此任务将被阻塞
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// 模拟任务执行时间
for (int i = 0; i < 20; ++i) {
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"Task 1 --- %@", [NSThread currentThread]); // 打印当前线程
}
// 任务完成后,释放信号量
dispatch_semaphore_signal(semaphore);
// 离开group
dispatch_group_leave(group);
});
// 添加第二个任务到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);
});
// 添加第三个任务到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);
});
// 等待所有任务完成
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 所有文件都下载完成,执行这里的代码
NSLog(@"Task 所有文件都下载完成 --- %@", [NSThread currentThread]); // 打印当前线程
});
为GCD并发队列设置最大并发数
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 不知道为什么,简书图片一直上传失败,所以如果有兴趣移步掘金看下。具体详见掘金: https://juejin.cn...
- 1、多线程操作同一数据进行 多读单写 线程安全控制;2、多线程执行不同任务的前后时序控制; 思考一个问题,串行队列...
- 1.主队列 1.1同步函数 + 主队列 同步函数 任务放入主队列 会阻塞主队列 1.2异步函数 + 主队列 异步函...
- 首先感谢行走的少年郎写的一篇文章《iOS多线程--彻底学会多线程之『GCD』》它让我对GCD的许多概念有了清晰的理...