栅栏函数
dispatch_queue_t concurrentQueue = dispatch_queue_create("objective", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^{
NSLog(@"1");
});
dispatch_async(concurrentQueue, ^{
NSLog(@"3");
});
dispatch_barrier_async(concurrentQueue, ^{
NSLog(@"栅栏函数任务~");
});
NSLog(@"4");
信号量
dispatch_semaphore_t sem = dispatch_semaphore_create(1);
dispatch_queue_t queue = dispatch_queue_create("测试", DISPATCH_QUEUE_CONCURRENT);
for (NSInteger i = 0; i < 10; i ++) {
dispatch_async(queue, ^{
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
NSLog(@"%@", [NSString stringWithFormat:@"任务%ld",i]);
dispatch_semaphore_signal(sem);
});
}
__block NSInteger value = 10;
for (NSInteger i = 0; i < 10; i ++) {
dispatch_async(queue, ^{
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
value --;
NSLog(@"%ld", (long)value);
dispatch_semaphore_signal(sem);
});
}
线程组
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_group_enter(group);
dispatch_async(queue, ^{
NSLog(@"111111");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(queue, ^{
NSLog(@"22222");
dispatch_group_leave(group);
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"所有异步结束后 回到这里");
});
dispatch_group_enter(group);
dispatch_async(queue, ^{
sleep(2);
NSLog(@"33333");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(queue, ^{
NSLog(@"44444");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_async(queue, ^{
sleep(5);
NSLog(@"666666");
dispatch_group_leave(group);
});
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("22", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_async(group, queue, ^{
NSLog(@"11111111");
});
dispatch_group_async(group, queue, ^{
sleep(6);
NSLog(@"2222222");
});
dispatch_group_async(group, queue, ^{
NSLog(@"3333333");
});
dispatch_group_async(group, queue, ^{
NSLog(@"666666");
});
dispatch_group_notify(group, queue, ^{
NSLog(@"更新————————");
});