dispatch_async 与 dispatch_sync

2023-11-01

从字面意思上看,sync 同步,async 异步。

  • 并行队列 + 异步 = 异步
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });
  • 并行队列 + 同步 = 同步
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
    });
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });

顺序执行

  • 串行队列 + 同步
dispatch_sync(dispatch_get_main_queue(), ^{

});

主线程是一个同步队列,里面加一个同步任务,线程锁死。老一些的iOS版本直接会闪退,新一些的版本block中的代码块将不会被执行,但未闪退。总之这样做是有问题的。需要判断处理:

if ([[NSThread currentThread] isMainThread])
{
    // ...
}
else {
    dispatch_async(dispatch_get_main_queue(), ^{
        // ...
    });
}

为了线程安全,做这样处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dispatch_async 与 dispatch_sync 的相关文章

随机推荐

  • 两个有序序列的中位数(详解)

    1 实践题目 7 3 两个有序序列的中位数 2 问题描述 在一行中输出两个输入序列的并集序列的中位数 时间复杂度不能大于O logn 3 算法描述 不能粘贴程序 因为时间复杂度不能大于logn 所以把原序列排好序再来找中位数是不可能的了 快
  • float,double 的范围和有效数字怎么算出来的?

    首先说一下 范围是3 4E 38 3 4E 38 可提供7位有效数字 上述这两个量都是近似值 各个编译器不太一样的 下面我就将标准值是怎么定义的 和你说一下 这个比较复杂 建议你找一下IEEE754标准看一下 这个简单说一下吧 在IEEE7
  • 『坚如磐石的 PieCloudDB』:透明加密模块的设计与实现

    导读 2 月 17 日 由中国开源软件推进联盟 PostgreSQL 分会 中科院软件所 CSDN 联合举办的 中国 PostgreSQL 数据库生态大会 盛大召开 拓数派 OpenPie 作为冉冉升起的新一代云原生分布式数据库厂商 受邀参
  • 【C++】IO流

    文章目录 1 C语言的输入与输出 2 流是什么 3 C IO流 3 1 C 标准IO流 3 2 C 文件IO流 3 2 1 二进制读写 3 2 2 文本读写 4 stringstream 字符串流 的简单介绍 5 总结 1 C语言的输入与输
  • SQLite下载、安装与连接

    1 下载SQLite SQLite官网 https www sqlite org download html 根据自己电脑操作系统配置 选择32位或64位下载 一般情况下是64位 总共两个压缩包 或者直接去 https download c
  • 如何打造优秀Web3产品

    近日 我们采访了Mysten Labs的联合创始人兼首席执行官Evan Cheng 探讨了Web3技术对消费者的价值 Web3行业应该如何更好地自我诠释 以及它对产品开发的影响 您曾谈到Web3作为一种所有权实验 这种新技术可能会改变消费者
  • Oracle中的数据导出(4)

    目录 法一 使用SQL plus命令脚本 法二 使用PLSQL Developer工具 前几篇文章描述了如何将Oracle中的数据导出到库外 但是导出的数据结果都是文本文档 这样页面查看不和谐 编辑又略显麻烦 因此这篇文章将描述如何将Ora
  • 116_QT_RCC: Error in ‘file.qrc‘: Cannot find file

    有中文路径或者名字 导致找不到文件 全部改成英文就OK了
  • 数据耦合与控制耦合

    数据耦合 其中一个模块的输出作为另一个模块的输入 那么就存在数据耦合 如 Module A中 int FunA return 1 Module B中 int b FunA 上面两个modules就存在数据耦合 控制耦合 其中一个模块可以控制
  • C语言中对用户输入的数据使用冒泡排序法后输出

    代码 include stdio h include windows h int main 先定义一个数组a 变量i j和临时变量temp 用来存放临时数据 int a 5 i j temp printf Input Five Number
  • 点云双边滤波算法(附 matlab 代码)

    一 原理概述 在二维图像领域中 双边滤波算法是通过考虑中心像素点到邻域像素点的距离 一边 以及像素亮度差值所确定的权重 另一边 来修正当前采样中心点的位置 从而达到平滑滤波效果 同时也会有选择性的剔除部分与当前采样点 差异 太大的相邻采样点
  • ABA问题的解决

    什么是ABA问题 ABA问题是发生在CAS过程当中的下面以一个例子来表示 假如有两个线程A B 两个线程都从主内存中获取了某个对象的值为value1 当进行CAS的时候A首先把value1更换成了value2 因为线程B可能没有CPU资源调
  • PYGAME关于矩形自动移动问题(碰到边界反弹)

    import pygame sys from settings1 import plant game ai setting plant game class moving def init self ai setting screen se
  • mysql学习笔记二(函数)

    函数 一 字符串函数 二 数值函数 三 日期函数 四 流程函数 一 字符串函数 select 函数 参数 注意 substring str start len 函数起始索引为1 二 数值函数 例 select ceil 1 1 gt 2 s
  • 超算云(GPU服务器)环境配置

    最近在用并行超算云GPU服务器 中国国家网格12区 搭建毕设的环境 这里记录一下 首先 超算云服务器的登录可以采用网页版 也可以采用客户端 超算云地址 https cloud paratera com 需要注意的是 并行超算云只提供wind
  • [FPGA IP系列] BRAM IP参数配置与使用示例

    FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM 上一篇文章中已经详细介绍了Vivado FIFO IP 今天我们来聊一聊BRAM IP 本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧 一 BRAM IP核的配置
  • 人工智能革命:从AGI到ASI的道路

    在某种程度上 我们将获得具有人类一般智能的AGI计算机后 只是一群人和计算机平等地生活在一起 哦 实际上并不会 问题是 AGI具有与人类相同的智能和计算能力水平 但仍然具有优于人类的优势 如 硬件 速度 大脑的神经元最大频率大约为200赫兹
  • 数据分析--Python将dataframe格式数据存入clickhouse

    Python将dataframe格式数据存入clickhouse 基于Python实现大批量dataframe格式数据存入clickhouse中 python 一切 基于Python实现大批量dataframe格式数据存入clickhous
  • 信用卡风控——梯度提升树方法Python实现

    本文是一个用户按时还款的预测模型 利用台湾地区一些信用卡客户的信用额度 教育程度 婚姻状况 过去的还款状态 账单等信息对客户进行评分 采用GBDT 梯度提升树 模型对数据进行分类 预测其是否会产生逾期偿还 数据来源于kaggle的一个比赛
  • dispatch_async 与 dispatch_sync

    从字面意思上看 sync 同步 async 异步 并行队列 异步 异步 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DEFAULT 0 dispatch