zoukankan      html  css  js  c++  java
  • 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);
                
            });
        }
    }
  • 相关阅读:
    使用IOCP完成端口队列做任务队列
    对Zlib单元进行再封装
    XmlReader/XmlWriter 类
    TextReader/TextWriter 的类
    LINQ to XML
    Xml序列化
    动态Linq(结合反射)
    设计模式总结
    深入了解.Net上下文
    应用程序域
  • 原文地址:https://www.cnblogs.com/langji/p/5937626.html
Copyright © 2011-2022 走看看