
DCD
`c++
#pragma 信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// 相当于加锁
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"执行任务1");
// 相当于解锁
dispatch_semaphore_signal(semaphore);
});
dispatch_async(queue, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"执行任务2");
dispatch_semaphore_signal(semaphore);
});
dispatch_async(queue, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"执行任务3");
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[NSThread sleepForTimeInterval:3];
NSLog(@"异步执行任务3");
dispatch_semaphore_signal(semaphore);
});
});
dispatch_async(queue, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"执行任务4");
dispatch_semaphore_signal(semaphore);
});
#pragma barrier
dispatch_queue_t queue2 = dispatch_queue_create("zzn.com.01", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue2, ^{
// doSomething()
[NSThread sleepForTimeInterval:2];
NSLog(@"barrier:执行任务1");
});
dispatch_barrier_async(queue2, ^{
NSLog(@"barrier:执行任务2");
});
#pragma group
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue3 = dispatch_queue_create("zzn.com.03", DISPATCH_QUEUE_CONCURRENT);
//
dispatch_group_async(group, queue3, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"group:执行任务1");
});
// 等同 dispatch_group_async
dispatch_async(queue3, ^{
dispatch_group_enter(group);
[NSThread sleepForTimeInterval:2];
dispatch_group_leave(group);
NSLog(@"group:执行任务2");
});
dispatch_group_notify(group, queue3, ^{
NSLog(@"group:执行任务3");
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);




近期评论