引用:《Objective-C高级编程》
1、Dispatch Semaphone
是持有计数的信号,可实现细粒度的排他控制。
多线程编程中可以用来控制最大线程数控制。
dispatch_semaphore_t semaphore=dispatch_semaphore_create(1);
dispatch_queue_t globQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
NSMutableArray *ar=[[NSMutableArray alloc]init];
@try {
for(int i=0;i<100000;i++)
{
dispatch_async(globQueue, ^{
//信号计数达到>=1的条件,dispatch_semaphore_wait 信号计数减1,并返回
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//信号计数变为0
//执行对数组更新操作
[ar addObject:[NSNumber numberWithInteger:i]];
//数组操作完成后,排他控制处理结束,
//通过dispatch_semaphore_signal ,信号量加1
dispatch_semaphore_signal(semaphore);
//如果有通过wait函数 等待 dispatch semaphore 计数增加的线程,由最先等待的线程先执行。
});
}
} @catch (NSException *exception) {
NSLog(@"error= %@",exception.description);
} @finally {
}
2、dispatch_once
dispatch_once 函数是保证在应用程序执行中只执行一次指定处理的API。
在单例模式中生成单例对象时使用
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//initialize
});
3、Dispatch I/O /Dispatch Data
用于较大文件的读写。
dispatch_io_create
:生成Dispatch I/O
dispatch_io_set_low_water
:设定一次读取的大小
dispatch_io_read
:开始使用Global Dispatch Queue 开始并列读取。