例程一:控制线程数量
//信号量控制并发
dispatch_group_t group = dispatch_group_create();
dispatch_semaphore_t semaphore = dispatch_semaphore_create(10);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for(int i=0;i<100;i++){
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_group_async(group, queue, ^{
NSLog(@"i=%i",i);
sleep(2);
dispatch_semaphore_signal(semaphore);
});
}
简单介绍一下
dispatch_semaphore_create(10): 创建信号量
dispatch_semaphore_wait(): 同步等待,对信号量减1效果
dispatch_semaphore_signal(): 对信号量加1效果
例程二:精细的同步效果
//信号量控制并发2
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i=0;i<1000;i++){
dispatch_async(queue, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[array addObject:[NSNumber numberWithInt:i]];
NSLog(@"add");
dispatch_semaphore_signal(semaphore);
});
}