iOS gcd栅栏函数dispatch_barrier使用注意

dispatch_barrier栅栏函数的作用就不用我多说了。常见的使用场景经常
1、多线程操作同一数据进行 多读单写 线程安全控制;
2、多线程执行不同任务的前后时序控制;

思考一个问题,串行队列还有必要使用dispatch_barrier栅栏函数吗?
很显然,dispatch_barrier在串行队列上发挥不了作用。

因此,dispatch_barrier一般配合的是并发队列。

请看下面截图代码


截屏2020-05-25 下午6.03.57.png

你觉得输出结果是?
任务1,任务2随意,任务3一定在任务1,任务2后,任务4一定在任务3后?

不好意思太天真了。
任务1,任务2,任务3,任务4都是随意的。

内心mmp?怎么搞得?

罪魁祸首就是你获取的是系统级别的全局并发队列,
解决办法,自己创建一个自定义的并发队列。
正确的姿势:


截屏2020-05-25 下午6.07.48.png

你可能感兴趣的:(iOS gcd栅栏函数dispatch_barrier使用注意)