大神链接
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"只执行一次");
});
- 1,2先在子线程执行,barrier在执行,然后3,4在执行
dispatch_queue_t queue = dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT)
dispatch_async(queue, ^{
sleep(2.0)
NSLog(@"1---%@",[NSThread currentThread])
})
dispatch_async(queue, ^{
sleep(2.0)
NSLog(@"2---%@",[NSThread currentThread])
})
// dispatch_barrier_sync(queue, ^{
// sleep(2.0)
// NSLog(@"barrier -- %@",[NSThread currentThread])
// })
dispatch_barrier_async(queue, ^{
sleep(2.0)
NSLog(@"barrier -- %@",[NSThread currentThread])
})
NSLog(@"main--------")
dispatch_async(queue, ^{
sleep(2.0)
NSLog(@"3---%@",[NSThread currentThread])
})
dispatch_async(queue, ^{
sleep(2.0)
NSLog(@"4---%@",[NSThread currentThread])
})
- 遍历10次,每个在不同线程,但在begin和end之间完成
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
NSLog(@"begin----");
dispatch_apply(10, queue, ^(size_t index) {
sleep(2.0);
NSLog(@"%zu --- %@",index,[NSThread currentThread]);
});
NSLog(@"end----");
dispatch_group_t group = dispatch_group_create()
dispatch_queue_t currentQueue = dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT)
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"1---%@",[NSThread currentThread])
})
dispatch_group_notify(group, currentQueue, ^{
sleep(2.0)
NSLog(@"end ----- %@",[NSThread currentThread])
})
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"2---%@",[NSThread currentThread])
})
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"3---%@",[NSThread currentThread])
})
dispatch_group_t group = dispatch_group_create()
dispatch_queue_t currentQueue = dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT)
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"1---%@",[NSThread currentThread])
})
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"2---%@",[NSThread currentThread])
})
dispatch_group_async(group, currentQueue, ^{
sleep(2.0)
NSLog(@"3---%@",[NSThread currentThread])
})
// 上面任务全部完成后,执行下面
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
NSLog(@"end-----")