dispatch_barrier_async

在访问数据库或文件时,使用Serial Dispatch Queue可避免数据竞争的问题。

写入处理确实不可与其他的写入处理以及包含读取处理的其他某些问题并行执行。但是如果读取处理只是与读取处理并行执行,那么多个并行执行就不会发生问题。

为了高效率地进行访问,读取处理追加到Concurrent Dispatch Queue中,写入处理在任一个读取处理没有执行的状态下,追加到Serial Dispatch Queue 中即可(在写入处理结束之前,读取处理不可执行)。

解决方法:dispatch_barrier_async函数同dispatch_create_queue函数生成的Concurrent Dispatch Queue一起使用。

首先dispatch_queue_create函数生成Concurrent Dispatch Queue,在dispatch_async中追加读取处理。

dispatch_queue_t queue = dispatch_queue_create("com.example.gcd.ForBarrier",DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue,blk0_for_reading);

dispatch_async(queue,blk1_for_reading);

dispatch_async(queue,blk2_for_reading);

dispatch_async(queue,blk3_for_reading);

dispatch_async(queue,blk4_for_reading);

dispatch_async(queue,blk5_for_reading);

dispatch_async(queue,blk6_for_reading);

dispatch_async(queue,blk7_for_reading);

dispatch_release(queue);

在blk3_for_reading处理和blk4_for_reading处理之间执行写入处理,并将写入的内容读取blk4_for_reading处理以及之后的处理中。

dispatch_async(queue,blk0_for_reading);

dispatch_async(queue,blk1_for_reading);

dispatch_async(queue,blk2_for_reading);

dispatch_async(queue,blk3_for_reading);

/*

*写入处理

*将写入的内容读取之后的处理中

*/

dispatch_async(queue,blk4_for_reading);

dispatch_async(queue,blk5_for_reading);

dispatch_async(queue,blk6_for_reading);

dispatch_async(queue,blk7_for_reading);

我们使用dispatch_barrier_async函数。dispatch_barrier_async函数会等待追加到Concurrent Dispatch Queue上的并行执行的处理全部结束之后,再将指定的处理追加到该Concurrent Dispatch Queue中。然后在由dispatch_barrier_async函数追加的处理完毕后,Concurrent Dispatch Queue 才恢复为一般的动作,追加到该Concurrent Dispatch Queue 的处理又开始并行执行。

dispatch_async(queue,blk0_for_reading);

dispatch_async(queue,blk1_for_reading);

dispatch_async(queue,blk2_for_reading);

dispatch_async(queue,blk3_for_reading);

dispatch_barrier_async(queue,blk_for_writing);

dispatch_async(queue,blk4_for_reading);

dispatch_async(queue,blk5_for_reading);

dispatch_async(queue,blk6_for_reading);

dispatch_async(queue,blk7_for_reading);

使用Concurrent Dispatch Queue和dispatch_barrier_async函数可实现高效率的数据库访问和文件访问。

GCD合集:

dispatch_barrier_GCD学习之dispatch_barrier_async详解相关推荐

  1. halcon例程讲解_跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量

    跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量 This example program demonstrates the basic usage of a measure object. ...

  2. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  3. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  4. IOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    转:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINaviga ...

  5. 随笔分类 - HALCON学习例程中文详解

    from: https://www.cnblogs.com/chita/category/563492.html 随笔分类 - HALCON学习例程中文详解 HALCON学习例程中文详解 跟我学机器视 ...

  6. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  7. Java学习软件安装详解

    Java学习软件安装详解 一直对Java的学习马马虎虎,新换的电脑,在重装java软件时遇到很多问题,安装了半天,想着以后自己也可能用到,所以写下来,以供大家参考. 1.准备工作 我的电脑:windo ...

  8. mysql dba系统学习-数据库事务详解

    mysql dba系统学习-数据库事务详解 上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉, ...

  9. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

  10. 【机器学习】集成学习及算法详解

    集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...

最新文章

  1. mysql不能改路径到d盘_Windows Server 2008 R2修改MySQL 5.5数据库目录为D盘示例
  2. 使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段
  3. 高级交叉报表例子程序(C#)中明细列统计数据错误改正!
  4. linux oracle 创建表空间2016,Linux下Oracle表空间及用户创建
  5. 在Linux环境下使用Apache部署ASP.NET Core
  6. 陪孩子看完这几部高分纪录片,胜过出国亲子游!
  7. MySQL更换内存分配器
  8. 计数 APP android,SharedPreferences初学~个人备忘录以及对进入APP的次数进行计数
  9. Audio驱动开发之音频链路学习笔记
  10. pandas——pd.DataFrame.iloc()
  11. 计算机教育部一级学科,教育部学科门类,一级学科有多少个?
  12. python读pdf文件字体大小_如何使用python中的pyPDF2更改pdf文件中的字体
  13. 关于idea中springboot主启动类没有绿色启动的问题
  14. 深拷⻉浅拷⻉的区别?什么是深拷⻉浅拷⻉
  15. “自学IT能走多远”
  16. vue 节流throttling防抖debounce
  17. chatgpt如何自动生成角色prompt模板
  18. ffmpeg av_read_frame函数解析
  19. 摇一摇 微信 浏览器
  20. 考研英语 - word-list-40

热门文章

  1. python实现logistic增长模型拟合2019-nCov确诊人数2月1日更新
  2. Html2Excel 更名为 MyExcel,2.1.0 版本发布!
  3. 短信验证码收不到了怎么办?
  4. 数值算法之adjacent_difference
  5. golang的json的时间格式化解决方案
  6. CMAQ-5.2安装
  7. 服装尺寸 html,服装尺寸表
  8. 反垃圾邮件技术之密径追踪
  9. LSF - 集群概览
  10. 0014 UVA1589 象棋 Xiangqi