02-dispatch_barrier

ABAP代码检查(Code Review) 1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN... 阅读详情
1 dispatch_barrier_async 概念

栅栏方法,暂时的将一部操作做成一个同步操作,向一个栅栏一样的分开

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

2 作用

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

2.避免数据竞争

3 注意点:
  1. 队列一定不能是全局队列(dispatch_get_global_queue)
  2. 使用自己创建的并发队列(dispatch_queue_create(“read_write_queue”, DISPATCH_QUEUE_CONCURRENT);)
  3. 函数必须为asyn

在前面的任务执行结束后它(栅栏函数)才执行,而且它后面的任务等它执行完成之后才会执行(它前面任务顺序不能控制,它后面的顺序也不能控制)

4 使用
  • 不使用栅栏方法
#import "ViewController.h"

@interface ViewController ()
{
    dispatch_queue_t _queue;
    
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _queue = dispatch_queue_create("read_write_queue", DISPATCH_QUEUE_CONCURRENT);
    [self read];
    [self read];
    [self write];
}
- (void)read{
    //
    dispatch_async(_queue, ^{
        sleep(1);
        NSLog(@"read");
    });
}
- (void)write
{
    dispatch_async(_queue, ^{
        sleep(1);
        NSLog(@"write");
    });
}

@end
    
// 并发队列异步执行 日志输出时间是一定的
2018-12-12 10:13:19.814352+0800 GCD_Dispatch_Barrier_Demo[3297:42890] read
2018-12-12 10:13:19.814375+0800 GCD_Dispatch_Barrier_Demo[3297:42891] read
2018-12-12 10:13:19.814367+0800 GCD_Dispatch_Barrier_Demo[3297:42892] write
    
    
    
  • 使用栅栏方法,将异步操作暂时变成同步操作

@interface ViewController ()
{
    dispatch_queue_t _queue;
    
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _queue = dispatch_queue_create("read_write_queue", DISPATCH_QUEUE_CONCURRENT);
    
    [self read];
    [self read];
    [self write];
}
- (void)read{
    //
    dispatch_async(_queue, ^{
        sleep(1);
        NSLog(@"read");
    });
}
- (void)write
{
    // 使用栅栏方法
    dispatch_barrier_async(_queue, ^{
        sleep(1);
        NSLog(@"write");
    });

}

// 日志输出 则write 输出时间延迟1秒执行
2018-12-12 10:16:25.164446+0800 GCD_Dispatch_Barrier_Demo[3372:45243] read
2018-12-12 10:16:25.164445+0800 GCD_Dispatch_Barrier_Demo[3372:45244] read
2018-12-12 10:16:26.168443+0800 GCD_Dispatch_Barrier_Demo[3372:45244] write

Xilinx差分原语-IBUFGDS与OBUFGDS FPGA 它将差分信号转换为单端信号,并将其输入到FPGA的逻辑片上。它将单端信号转换为差分信号,并将其输出到FPGA的引脚。在FPGA设计中,差分信号是一种常见的信号传输方式,用于提高抗噪性和抑制共模噪声。Xilinx是一家知名的FPGA供应商,提供了许多差分原语,其中包括IBUFGDS和OBUFGDS。通过使用Xilinx的差分原语,如IBUFGDS和OBUFGDS,可以实现差分信号的输入和输出。这些差分原语提供了方便且可靠的接口,使得在FPGA设计中处理差分信号变得更加简单和高效。是差分输入信号的端口, 阅读详情

相关推荐

关于token无痛刷新的两个方案

目录方案一方案二 方案一 思路: 后端需要返回一个token过期的时间,在请求发起前拦截每个请求,判断token的有效时间是否已经过期,如果已过期,则暂时将请求挂起,先刷新token后再继续请求。 前期思考: 返回过期时间是为了判断是否过期的,但是如果服务器时间和系统时间不一致呢? 如果同时发起多个请求时怎么办? 实现: 因为是在请求前进行拦截,所以这里用axios的axios.interceptors.request.use()方法 首先,关于服务器时间和系统时间不一致的问题,我的解决方法是:

Yugoup的博客 2715

并发编程 - GCD的栅栏(dispatch_barrier_async)

在本文中,我们深入探讨了GCD栅栏操作的高级用法,通过实际示例展示了如何在并发队列中执行任务的顺序控制和实现读写锁。栅栏操作是处理复杂并发任务时非常强大的工具,它能够确保任务的顺序执行,避免数据不一致或冲突。然而,在使用栅栏操作时,需要特别注意一些关键点。首先,尽量避免在全局并发队列中使用栅栏操作,因为全局并发队列通常用于系统级任务。栅栏操作的使用应局限于专门为特定任务创建的并发队列,这样可以更好地控制执行任务的顺序。

weixin_39339407的博客 1301

Claude Skills 深度讲解

阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」

u013134676的博客 1464

iOS中的多线程开发技术第四篇之IO操作

在 iOS 开发中,数据访问的多线程环境非常普遍,例如缓存系统、数据库查询、文件操作等。对于多读少写的场景,设计一个高效且线程安全的方案至关重要。本文将深入介绍多读少写的设计思想,并结合实际代码示例进行详细讲解。

我叫柱子哥 1406

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践

本文详细解析了西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践。通过实际案例和代码示例,介绍了状态机的基础认知、硬件配置、逻辑开发、调试技巧以及与MES系统集成的高级应用,帮助工程师高效实现设备自动化控制。

weixin_29255731的博客 529

iOS 高级开发工程师面试进阶

本课程以帮助学员面试 iOS 开发高级工程师为目标,从 runtime、runloop、消息转流程、UI 绘制原理、常考算法题和设计模式等角度,对面试中常被考的知识点做讲解和总结,希望大家更快拿到高薪 offer。

西工大noj100题python2024第一季1-10

【代码】西工大noj100题python2024第一季1-10。

weixin_70523540的博客 1796

Barrier多计算机共享键鼠详细教程(可跨平台)+使用感受

Barrier是一款免费开源工具,可以帮助我们实现在Windows、macOS和Linux之间共用同一套鼠标和键盘,不仅让你摆脱在不同键鼠间反复切换的烦恼,还能省下一笔外设钱。 本文以Windows系统为例,教程包含了以下三部分详细内容①Barrier的下载安装和设置、②Bonjour的下载和安装、③Openssl下载安装和配置。照着做一遍,你也可以学会如何用一套键鼠操控多台主机。 目前的使用感受是鼠标有明显延迟卡顿感,键盘的同步较为流畅,可以实现剪贴板的共享。

分享实用的上网冲浪技巧 6万+

从AND到XOR:5种门控电路在PrimeTime中的检查策略差异

本文深入探讨了AND、NAND、OR、NOR和XOR五种门控电路在PrimeTime静态时序分析中的检查策略差异。重点解析了XOR门控因其非单调性而无法被工具自动推断,需要工程师手动配置的特殊性,并提供了针对各类门控的配置模板与调试技巧,以确保时钟网络的完整性与芯片设计的可靠性。

rgv2345678的博客 269

074.多任务学习:在YOLO基础上同时进行分割、关键点检测

本文探讨了在YOLOv5模型中实现检测、分割和关键点多任务的技术方案。通过分层特征抽取策略(检测用深层、分割用浅深融合、关键点用中层)解决特征共享问题;采用不确定性加权方法自动平衡多任务损失;设计了支持三种标签的数据流处理方式;并分享了推理部署时的后处理技巧。实践表明,合理的多任务设计可以提升主任务性能,但需权衡标注成本和推理效率。最终方案选择在训练时引入分割作为辅助任务,推理时仅保留检测和关键点,实现了检测mAP提升2.3%的优化效果。

2603_95664987的博客 44

Github 星标 24.3K,一套键鼠就能控制多台主机,这个软件太赞了!

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !有时需要同时使用一台 MacBook 和一个 Windows 系统的台式机。但是工位的桌面太凌乱了,两套键鼠很占地方,而且两台电脑协作起来也不是很方便。能不能直接使用一套键鼠来控制两台电脑呢?这绝对是一个有创意的想法。寻找了一番,了不起找到了一个好用的开源工具——barrier。项目介绍Barrier 是一款模仿 K...

easylife206的专栏 2446

矩阵奇异值分解算法(SVD)的导数 / 灵敏度分析

设矩阵X∈Rm×nX∈Rm×nXUΣV⊤XUΣV⊤U∈Rm×mU∈Rm×m为左奇异向量矩阵;V∈Rn×nV∈Rn×n为右奇异向量矩阵;Σdiag⁡σ1σ2σrΣdiagσ1​σ2​σr​为奇异值对角阵(rrank⁡XrrankX我们关心:当XXX发生微小扰动dXdX时,UΣVUΣV如何变化?dXdUΣV⊤dX。

qq_36812406的博客 1750

dispatch_barrier_sync 和dispatch_barrier_async的区别

需求:有4个任务{1,2,3,4},执行完前2个再执行后2个 这里我们用到栅栏函数dispatch_barrier_(a)sync,(也可以用队列组),我们要注意的是不能使用全局并发队列(系统提供给我们的)否则会散失栅栏函数的意义 区别:先看官方文档 dispatch_barrier_sync: Submits a barrier block object for execution and waits until that block completes.(提交一个栅栏函数在执行中,它会等待栅栏函数执行完

More reading and learning to become excellent 1337

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

dispatch_barrier_GCD学习之dispatch_barrier_async详解

dispatch_barrier_async在访问数据库或文件时,使用Serial Dispatch Queue可避免数据竞争的问题。写入处理确实不可与其他的写入处理以及包含读取处理的其他某些问题并行执行。但是如果读取处理只是与读取处理并行执行,那么多个并行执行就不会发生问题。为了高效率地进行访问,读取处理追加到Concurrent Dispatch Queue中,写入处理在任一个读取处理没有执行...

weixin_36180471的博客 2014

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

dispatch_barrier_async 隐藏的坑

今天在看文档的时候无意中发现的一个坑 * When submitted to a a global queue or to a queue not created with the  * DISPATCH_QUEUE_CONCURRENT attribute, barrier blocks behave identically to  * blocks submitted w

一只叫花花的猪的专栏 2551

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GCD中dispatch_barrier的使用方法

假如现在有几组任务,我们并不关心每组中的各个任务的执行顺序,但是我们要求这几组任务按顺序分批进行,也就是说第一组任务全部执行之后,再启动第二组任务,以此类推。在这种情况下,我们使用 dispatch_barrier 函数将会非常高效,dispatch_barrier 函数又称作栅栏函数,顾名思义,就是像栅栏一样可以把不同任务分开。 在下面例子中,我们假设有两组任务,第一组包含任务 1 和任务 2,...

毛毛虫 2224

dispatch_barrier_async的使用

dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行. 在如下场景: 在访问数据操作时,可以并行读取,因此这种操作应该放到concurrent Dispatch Queue中,写入操作是在任何读取操作执行之前,放到serial Dispatch Queue,在写入处理结束之前,读取处理操作不可进行。 此时使用dispatc

richard_如风的专栏 2297

dispatch_barrier_GCD(二) dispatch_barrier

本文是GCD多线程编程中dispatch_barrier内容的小结,通过本文,你可以了解到:dispatch_barrier的来源如何使用dispatch_barrier_async/dispatch_barrier_sync函数处理栅栏任务dispatch_barrier_async/dispatch_barrier_sync函数使用效果的对比如何使用dispatch_barrier_async...

weixin_39650091的博客 307

dispatch_barrier_async函数

写篇文章实践一下这个函数 . dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(concurrentQueue, ^(){ NSLog(@"dispatch-1");

wangzitao126的专栏 2834

dispatch_barrier_async和dispatch_barrier_sync的区别在哪呢?

先看用dispatch_barrier_sync代码: 给的图里写的是dispatch_barrier_sync,因为我们需要先看看我们熟悉的等待——sync是什么效果,直接跑起来 ,看结果如下 可以看到,确实是1、2、3号任务并发执行完了,然后再执行我们dispatch_barrier_sync中的任务,再并发执行的4、5、6号任务,当然,point3和barrier之间是有明显停顿的,截

ivolcano的博客 1659

GCD 高级特性解析:dispatch_group、dispatch_semaphore 与 barrier 的巧妙运用

Grand Central Dispatch(GCD)作为 Apple 开发的多核并发技术,为开发者提供了强大的任务调度能力。本文将深入解析 GCD 中三个高级特性——dispatch_group、dispatch_semaphore 和 barrier,帮助你掌握这些工具的使用技巧,轻松应对复杂的并发场景。 ## dispatch_group:任务协同的终极方案 dispatch_group

gitblog_01049的博客 869

栅栏函数dispatch_barrier_sync/async

有几个并行执行的操作:1,2,3,4,5 如果我们想要在1,2,3执行完毕后,执行A操作,然后再执行4,5 那么我们就可以使用栅栏函数来解决; 1、使用dispatch_barrier_sync 串行 函数: 在插入队列的时候是串行的,在任务真正执行的过程中也是串行的。 - (void)testCustomBarrier{ dispatch_queue_t currentQueue = d...

whxuan_ios的博客 610

浅析dispatch_barrier_async

在并行队列中,为了保持某些任务完成的顺序,需要等待一些任务完成后才能继续进行,使用barrier来等待之前任务完成,避免数据竞争等问题。 使用函数dispatch_barrier_async函数会等待追加到Concurrent Dispatch Queue并行对列中的操作全部执行完之后,然后再执行dispatch_barrier_async函数追加的处理,等dispatch_barrier_as...

jimZT的博客 1082

dispatch_barrier_async和dispatch_barrier_sync

dispatch_barrier_async和dispatch_barrier_sync是 GCD 中的两个方法。是不是和dispatch_async及dispatch_sync长得很像,就是多了一个barrier(译:栅栏)。 没错,除了有dispatch_async或dispatch_sync的作用外(是否阻塞当前线程),还有“栅栏”的效果。 意思就是,以他们为界,待前面任务执行完成,再把自

金鱼的博客 853

dispatch_barrier_async

本以为dispatch_barrier_async是在并行对列中前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行. 但调试代码时发现,dispatch_barrier_async在dispatch_get_global_queue队列中没有起效,虽然dispatch_get_global_queue也是并行队列     dispatch_queue_t q

qq_36948722的博客 161
上一篇: 01-基本概念
下一篇: 03-dispatch_after
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值