dispatch_async(queue,^ { /* *执行任务 */ });
dispatch_queue_t serialDispatchQueue = dispatch_queue_create("SerialDispatchQueueName",NULL); dispatch_async(serialDispatchQueue,^ { }); dispatch_release(serialDispatchQueue);创建Concurrent Dispatch Queue
dispatch_queue_t concurrentDispatchQueue = dispatch_queue_create("ConcurrentDispatchQueueName",DISPATCH_QUEUE_CONCURRENT); dispatch_async(concurrentDispatchQueue,^ { }); dispatch_release(concurrentDispatchQueue);
dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();
//高优先级 Global Dispatch Queue dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0); //默认优先级 Global Dispatch Queue dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); //低优先级 Global Dispatch Queue dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0); //后台优先级 Global Dispatch Queue dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^() { //并行处理任务 dispatch_async(dispatch_get_main_queue(),^() { //主线程中执行处理 }); });
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull*NSEC_PER_SEC); dispatch_after(time,dispatch_get_main_queue,^() { //3秒后的处理 });
static dispatch_once_t token; dispatch_once(&token,^() { });
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group,queue,^{ NSLog(@"TestBlock1"); }); dispatch_group_async(group,queue,^{ NSLog(@"TestBlock2"); }); dispatch_group_notify(group,dispatch_get_main_queue(),^{ NSLog(@"Done"); });同步:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group,queue,^{ NSLog(@"TestBlock1"); }); dispatch_group_async(group,queue,^{ NSLog(@"TestBlock2"); }); dispatch_group_wait(group,DISPATCH_TIME_FOREVER); NSLog(@"Done");
dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_async(queue,^ { dispatch_sync(queue,^{ NSLog(@"线程死锁"); }); });
dispatch_apply(10,queue,^(size_t index) { NSLog(@"%zu",index); }); NSLog(@"Done");
dispatch_queue_t queue = dispatch_queue_create(@"ConcurrentDispatchQueue",DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue,Block1ForReading); dispatch_async(queue,Block2ForReading); dispatch_async(queue,Block3ForReading); dispatc_barrier_async(queue,BlockForWriting); dispatch_async(queue,Block4ForReading); dispatch_async(queue,Block5ForReading); dispatch_async(queue,Block6ForReading); dispatch_release(queue);
dispatch_queue_t myQueue = dispatch_queue_create(@"myQueue",0); dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0); dispatch_set_target_queue(myQueue,globalQueue);
dispatch_suspend(queue);dispatch_resume会恢复指定的Dispatch Queue
dispatch_resume(queue);
GCD提供了线程的信号量处理函数:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1); dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER); dispatch_semaphore_signal(semaphore);
2.Concurrent Programming Guide
原文:http://blog.csdn.net/joywii/article/details/23041195