当我通过dispatch_async
或类似方法在任何队列上运行块时,GCD是否在块调用周围提供了线程围栏?我认为它确实如此,但据我所知,文档没有提供任何方式的提示。
答案 0 :(得分:5)
来自Cocoa-Dev邮件列表上的电子邮件主题,Greg Parker(Apple的运行时工程师之一)replied to a question of mine:
[S]使用GCD并没有给我们所有人带来灾难,我认为dispatch_async()等确实提供了这样的内存障碍。同样,NSOperationQueue,-performSelector:onThread:...等也必须如此。是吗?
我希望任何不能为某些用途提供足够内存屏障的多处理原语会大声记录这个事实。 dispatch_once()的存储是缺失障碍的一个记录示例。一些OSAtomic功能是另一个例子。但是,几乎所有重量都要比任何客户都要完整的内存屏障。