dispatch_semaphore信号量是一种基于计数器的一种多线程同步机制
在多个线程访问共有资源的时候,会因为多线程的特性引发数据出错。
- (void)addData { dispatch_queue_t concurrentQueue = dispatch_queue_create("ddz.concurrent", DISPATCH_QUEUE_CONCURRENT); dispatch_group_t group = dispatch_group_create(); dispatch_semaphore_t lock = dispatch_semaphore_create(1); for (int i = 0; i < 50; i++) { //并列队列的异步执行 dispatch_group_async(group, concurrentQueue, ^{ //下面这两句代码中间的执行代码,每次只会允许一个线程进入 //这样就有效保证了在多线程环境下,只能有一个线程进入 //如果lock的值大于等于1继续执行,否则(-1)返回 dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); //执行你需要的代码 //使lock的值加1 dispatch_semaphore_signal(lock); }); } }