GCD深入学习(1)dispatch_semaphore

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);
            
        });
    }
}

 

posted @ 2016-10-08 10:24  blue-fly  阅读(475)  评论(0编辑  收藏  举报