串行队列上的dispatch_async和dispatch_sync之间的区别?

2023-12-05

我创建了一个像这样的串行队列:

    dispatch_queue_t _serialQueue = dispatch_queue_create("com.example.name", DISPATCH_QUEUE_SERIAL);

有什么区别dispatch_async像这样称呼

 dispatch_async(_serialQueue, ^{ /* TASK 1 */ });
 dispatch_async(_serialQueue, ^{ /* TASK 2 */ });

And dispatch_sync在这个串行队列上这样调用?

 dispatch_sync(_serialQueue, ^{ /* TASK 1 */ });
 dispatch_sync(_serialQueue, ^{ /* TASK 2 */ });

我的理解是,无论使用哪种调度方法,TASK 1将在之前执行并完成TASK 2, 正确的?


是的。使用串行队列保证任务的串行执行。唯一的区别是dispatch_sync仅在块完成后返回,而dispatch_async添加到队列后返回,并且可能未完成。

对于这段代码

dispatch_async(_serialQueue, ^{ printf("1"); });
printf("2");
dispatch_async(_serialQueue, ^{ printf("3"); });
printf("4");

可能会打印2413 or 2143 or 1234 but 1总是在之前3

对于这段代码

dispatch_sync(_serialQueue, ^{ printf("1"); });
printf("2");
dispatch_sync(_serialQueue, ^{ printf("3"); });
printf("4");

它总是打印1234


注意:对于第一个代码,它won't print 1324。因为printf("3")已派遣after printf("2")被执行。并且一个任务只能被执行after已发送。


任务的执行时间不会改变任何东西。此代码始终打印12

dispatch_async(_serialQueue, ^{ sleep(1000);printf("1"); });
dispatch_async(_serialQueue, ^{ printf("2"); });

可能发生的情况是

  • 线程1:dispatch_async一个耗时任务(任务1)到串行队列
  • 线程2:开始执行任务1
  • 线程1:dispatch_async另一个任务(任务2)到串行队列
  • 线程 2:任务 1 完成。开始执行任务2
  • 线程 2:任务 2 完成。

你总是看到12

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

串行队列上的dispatch_async和dispatch_sync之间的区别? 的相关文章

  • 如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?

    我尝试了多个 SDK 但无法从任何资源获取电子邮件 ID 我努力了FHSTwitterEngine为此目的 但我没有得到解决方案 FHSTwitterEngine twitterEngine FHSTwitterEngine sharedE
  • 无法连接到 iTunes Store(获取应用内购买列表)

    我正在尝试从我的应用程序的应用程序内购买项目商店中获取列表 这是我所做的 安装了新的配置文件并启用了应用内购买 替换配置文件很棘手 但我认为我的设置是正确的 验证税务和银行信息是否正常 该应用程序已在商店出售 创建测试用户 在测试设备上以测
  • iOS - 如何在 swift 中使用 `NSMutableString`

    我已经看过这段 Objective C 代码 但我很难在 swift 中做同样的事情 NSMutableAttributedString res self richTextEditor attributedText mutableCopy
  • 如何找到键盘未覆盖的视图部分(UIModalPresenationStyleFormSheet)?

    我有一个视图控制器 显示带有 UITextView 的视图 并且我想在键盘出现时调整视图的大小 以便 UITextView 不会被键盘覆盖 我几乎在所有情况下都可以正常工作 据我所知 仅当视图控制器以 ModalPresentationSt
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 排序线程按照它们创建/启动的顺序运行

    我如何按照线程实例化的顺序对线程进行排序 我怎样才能让下面的程序按顺序打印数字1 10 public class ThreadOrdering public static void main String args class MyRunn
  • 如何处理来自单独线程的窗口消息?

    我希望启动一个单独的线程来处理窗口消息 通过阻塞 GetMessage 循环 但之后仍然在初始线程中创建窗口 在单独的线程中 一旦启动 我就会调用PeekMessage使用 PM NOREMOVE 确保消息队列存在 有必要吗 然后 Atta
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • 如何制作带有 SWIFT 图像的弹出窗口

    我想知道如何制作类似于此示例的弹出窗口 原始窗口充满了按钮 选择这些按钮后将拉出我想要使用的图像 我会简单地创建一个可重用的UIView组件以及作为子视图所需的一切 例如UIImageView为了你的形象 UILabel or a UIBu
  • 每 24 小时触发一次方法

    我正在尝试每天在给定时间触发一个方法 我尝试了一些方法 但我无法真正使其发挥作用 任何意见 将不胜感激 此外 如果无论应用程序是否打开它都会触发 那就更理想了 这可能吗 UI本地通知 http developer apple com lib
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • Swift,以编程方式更改 UICollectionViewCell 和 UILabel(单元格内)的宽度

    我已将单元格 UICollectionViewCell 的宽度设置为等于 UICollectionView 的宽度 并且我尝试对该单元格中包含的 UILabel 执行完全相同的操作 我认为下面的代码准确地解释了我想要实现的目标 所以我在这里
  • 如何让UITextView背景线与文字对齐?

    我正在尝试绘制 UITextView 的背景线 这是我用来画这些线的代码 CGContextBeginPath context CGContextSetStrokeColorWithColor context self horizontal
  • 从命令行添加 Xcode 开发者帐户

    我正在尝试使用xcodebuild allowProvisioningUpdates在我只能通过命令行访问的计算机 Azure Devops macOS 托管计算机 上 不幸的是 根据man xcodebuild为了使用 allowProv
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • 如何在 OCaml 中使用列表实现二叉堆?

    我正在实施一个binary heap在 OCaml 中使用列表 只是为了提高我的 OCaml 技能 我觉得使用列表非常困难 经过两天的努力 我必须来这里寻求建议和提示 到目前为止 这是我的想法 显然我不能使用原来的array based使用
  • Android - AutoCompleteTextView 仅在退格时有效

    我有一个AutoCompleteTextView当用户键入时动态更新建议列表 我的问题是 当我输入时 列表会更新 但下拉列表不会显示 但是当我删除一个字符 退格键 时 会出现下拉菜单 我什至尝试明确地调用autoText showDropD
  • Python Tkinter 坐标函数不会在循环内移动画布对象

    我有一个函数 它从文本文件中读取位置 解析它们 然后使用 coords 函数将相应的对象移动到 tkinter 画布上列出的位置 正在从文件中读取数据并正确解析数据 但由于某种原因 coords 函数仅将对象移动到循环的最后一次迭代中文件中
  • WordPress:一页滚动 JQuery 脚本不起作用?

    尝试创建一个简单的一页滚动 在 WordPress 中 我有这样的导航标签 a href contact Contact a a href about About a 两个链接对应的 div 是这样的 div class bg 1 wrap
  • Grails 安全插件自定义重定向

    我是 Groovy 和 Grails 的新手 我使用 Spring Security 插件使用数据库请求的请求映射开发了一个应用程序 我想要根据角色自定义重定向到主页 如果用户是 ROLE ADMIN 他将被重定向到视图 adminUser
  • 从 https 中删除 www

    我正在尝试找到一个 htaccess 重写来删除 www 仅来自 https 页面 我发现的每篇文章都删除了所有页面的 www 我需要在 htaccess 中添加什么来执行此操作 https www mydomain com应该https
  • 当行值等于“yes”时连接 Google 表格中的标题值的数组公式

    I saw this问题但无法让它为我工作 因为它已经得到回答 并且从一年前开始 我觉得最好发布一个新问题 我有一个样本表 https docs google com spreadsheets d 1EqNfTWcNFgkv2gdovnH7
  • 返回多个变量以在 Laravel 中查看的最佳方法

    我有一个操作方法 其主体中有多个变量 如下所示 bus Bus all user User all employer employer all 将这些变量对象返回到视图正在做的事情是使用这样的代码 return view create gt
  • 使用 Nodejs 的 SendGrid 模板中的变量替换不起作用

    继USE CASE在 SendGrids github 上确实设法向我发送带有正确模板的电子邮件 但替换显然不起作用 并且在生成的电子邮件中留空 服务器端 const sgmailer require sendgrid mail sgmai
  • 使用 Protractor 设置 Angular 模型

    我正在尝试使用 Protractor 在我的网站上模拟用户故事 用户必须输入使用自动完成功能的输入 在现实生活中 用户必须在输入中键入一些文本 然后使用鼠标或更自然地使用向下箭头键选择正确的命题 问题是我似乎无法用 Protractor 来
  • 什么是 WINAPI_FAMILY_ONECORE_APP?

    我正在 GitHub 上查看 Microsoft 的 OpenSSL 端口 有一个提交引起了我的注意 那就是添加Win10通用平台支持 在提交中 一个名为WINAPI FAMILY ONECORE APP出现 然而 我在搜索时并没有找到太多
  • 如何禁用来自其他域的WebService调用

    我想避免其他人访问我的网络服务 我有一个名为 WebService asmx 的 Web 服务 它托管在 www xyz com 上 我们知道我们可以访问该服务 例如http www xyz com WebService asmx 如何避免
  • 如何强制Dotnet6桌面Winforms应用程序使用appsettings.json而不是Settings.settings?

    如何强制 Dotnet6 桌面 Winforms 应用程序使用 appsettings json 而不是 Settings settings App config 如果我在 Visual Studio 2022 中创建一个新的桌面应用程序以
  • 使用 Apache POI 打开 .xlsx 文件时出现异常

    我一直在开发一个 Android 应用程序 其中我必须打开 xls 和 xlsx 文件才能进一步实现 如果是 xls 一切工作正常 但当我尝试打开 xls x 文件时 它给了我异常 下面是我的代码 请帮我解决这些异常 Override pr
  • 使用PHP数组将数据插入MYSQL

    你好 我正在尝试使用数组在 mysql 中插入数据 有人可以看看我的代码吗 我似乎无法让它工作 这是我的post php POST PHP post id somefunction title POST title body POST bo
  • java -fullversion 中的 b 表示什么?

    当我们使用java 完整版本 我们得到像 java 完整版这样的输出 1 7 0 45 b18 这是什么b18在java完整版中 我仔细阅读了一些 oracle java 文章 其中指出它表示构建版本 那么这个构建版本应该是什么 我还看到一
  • 集合如何对元素类型使用隐式转换?

    在工作的同时这个问题 我提出了以下问题 考虑两个方法定义 def foo T lt Ordered T s Seq T s sorted def foo T
  • 减小 .png 文件的大小是否会对内存中的位图产生影响

    我正在用大量的PNG图片编写游戏 一切都很好 比我添加新活动WebView并出现内存不足的情况 之后我做了一些实验 用刚刚完全填充一些颜色的图像替换游戏 PNG 图像 结果内存短缺问题就消失了 但我想Bitmap在内部单独保存每个像素 因此
  • 如何在代码块中启用 c++17 支持

    在 codeblocks 的 Build 或 Compiler 选项中没有 C 17 选项 只有 C 14 我如何在代码块中启用它 以便编码工具和编译器都支持它 代码 块 is not一个编译器 但有些人美化了源代码编辑器 有时也称自己为I
  • 串行队列上的dispatch_async和dispatch_sync之间的区别?

    我创建了一个像这样的串行队列 dispatch queue t serialQueue dispatch queue create com example name DISPATCH QUEUE SERIAL 有什么区别dispatch a