3

当我通过或类似方式在任何队列上运行块时dispatch_async,GCD 是否在块调用周围提供线程围栏?我会假设它确实如此,但据我所知,文档没有给出任何暗示。

4

1 回答 1

6

Greg Parker(Apple 的运行时工程师之一)在 Cocoa-Dev 邮件列表上的一个电子邮件线程中回答了我的一个问题

[S]因为 GCD 的使用并没有给我们所有人带来灾难,我假设 dispatch_async() 和类似的东西确实提供了这样的内存屏障。同样,NSOperationQueue、-performSelector:onThread:... 等也必须如此。那正确吗?

我希望任何不为某些用途提供足够内存屏障的多处理原语都会大声记录这一事实。dispatch_once() 的存储是缺少障碍的一个记录示例。一些 OSAtomic 函数是另一个例子。但是几乎所有比这更重的东西都应该为任何客户端提供完整的内存屏障。

于 2015-04-25T12:42:35.630 回答