GCD中的dispatch_barrier_async函数的使用(栅栏函数)

<一>什么是dispatch_barrier_async函数

毫无疑问,dispatch_barrier_async函数的作用与barrier的意思相同,在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后,barrier函数之后的操作才会得到执行,该函数需要同dispatch_queue_create函数生成的concurrent Dispatch Queue队列一起使用

<二>dispatch_barrier_async函数的作用

1.实现高效率的数据库访问和文件访问

2.避免数据竞争

<三>dispatch_barrier_async实例

输出结果:1 2 --> barrier -->3 4  其中12 与 34 由于并行处理先后顺序不定

原文地址:https://www.cnblogs.com/lijinfu-software/p/10373691.html

时间: 2024-10-05 05:04:57

GCD中的dispatch_barrier_async函数的使用(栅栏函数)的相关文章

GCD栅栏函数dispatch_barrier

需求: 有4个任务, 需要开启多条线程去执行. 有一个特殊任务0, 需要在1,2任务执行完后, 再执行3, 4任务. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #78492a; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3e1e81; background-

多线程基础(七)GCD线程组+栅栏函数

1.GCD队列组 拦截通知和等待所有任务全部结束在继续往下执行|阻塞 需求:下载两张图片,等两张图片都下载完毕之后,合成图片(这个实例额外补充) 官方规定了,栅栏函数 只能用在并发队列中,不能使用在全局并发队列中

GCD中使用dispatch_after函数延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

GCD中不同队列 配合 不同函数的 情况分析

两种函数: 1>sync     同步函数, 2>async   异步函数, 四种队列: 1>main queue  主队列 2>手动创建的串行队列 3>全局并发队列 4>手动创建的并发队列 程序验证的就是两种函数分别配合四种队列的执行情况:共八种.全局并发队列和创建的并发队列执行效果是相同的,没有给出. 结果: 1>死锁,前面文章有过介绍,补充一点是:主线程在当前队列中添加任务才会死锁,添加到其他队列不会 2>同步函数配合四种队列都不会开启新的线程 3&g

GCD中一些API的使用

GCD中一些API的使用 1.串行队列和并行队列 iOS中线程分为串行队列和并行队列,串行队列指的是任务按照先后顺序,依次执行:并行队列指的是任务不按照加入的先后顺序,并发的执行. iOS中串行队列通过如下方式进行创建 dispatch_queue_t queue = dispatch_queue_create("cn.bourbonz.www", DISPATCH_QUEUE_SERIAL); 需要注意的是,引号中的内容表示的是对该队列的描述,后面的参数代表的是串行队列. 并行队列通

* SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)

题目大意: 给定n,m,求有多少组(a,b) 0<a<=n , 0<b<=m , 使得gcd(a,b)= p , p是一个素数 这里本来利用枚举一个个素数,然后利用莫比乌斯反演可以很方便得到答案,但是数据量过大,完全水不过去 题目分析过程(从别人地方抄来的) ans = sigma(p, sigma(d, μ(d) * (n/pd) * (m/pd))) Let s = pd, then ans = sigma(s, sigma(p, μ(s/p) * (n/s) * (m/s))

GCD中如何延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

关于GCD中的队列

队列分为串行队列,并发队列,全局队列和主队列: 串行队列:一次只能安排一个任务. dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA); DISPATCH_QUEUE_SERIAL==NULL: 并发队列:一次可安排多个任务. dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCUR

mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 说明: 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差.其结果的单位由interval 参数给出.interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同. mysql> SELECT TIMESTAMPDIFF(MONTH,'200