首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >performBlockAndWait vs dispatch_sync(dispatch_get_main_queue()

performBlockAndWait vs dispatch_sync(dispatch_get_main_queue()
EN

Stack Overflow用户
提问于 2013-10-14 21:55:03
回答 1查看 283关注 0票数 0
代码语言:javascript
复制
Utility.managedObjectContext().performBlockAndWait({

})

dispatch_sync(dispatch_get_main_queue(), {

})
  1. 奇怪的是,上面这两种代码有什么区别?上下文是用.MainQueueConcurrencyType选项创建的。
  2. 如果我在主队列上执行块,队列是否按照FIFO顺序执行?或者他们可以重叠,混合行动?即(a1,a2,a3),(b1,b2,b3)能产生(a1,b1,a2,a3,b2,b3)?
EN

回答 1

Stack Overflow用户

发布于 2015-05-12 09:28:59

您在这里混合了两个完全不同的概念,但是由于它是主线程/上下文/队列,所以您的组合被屏蔽了,并且“工作”。

托管对象上下文的performBlockAndWait:performBlock:方法并不保证在哪个线程上执行块,只会安全地访问访问/变异的数据。由于您的上下文是主队列并发类型,所以例外情况是,只在主线程上接触performBlockAndWait:performBlock:方法之外的对象是安全的。因此,当您将块排队在主队列上运行时,它保证在主线程上运行,因此您的数据是安全的。

主线程上的块执行不是原子的。否则,多线程有什么意义?为了确保数据安全,在访问数据时必须调用performBlockAndWait:performBlock:方法。您可以保证主队列调度块将由其他主队列调度块不中断地运行,托管对象上下文队列(背景或主队列)是串行的,因此只允许一个块并发访问数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19369929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档