dispatch_async(queue,^
{
/*
*执行任务
*/
});
dispatch_queue_t serialDispatchQueue = dispatch_queue_create("SerialDispatchQueueName",NULL);
dispatch_async(serialDispatchQueue,^
{
});
dispatch_release(serialDispatchQueue);创建Concurrent Dispatch Queuedispatch_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