当我通过dispatch_async
或类似方法在任何队列上运行块时,GCD是否提供线程栅栏来保护块调用?我认为它会提供,但据我所知,文档没有给出任何提示。
当我通过dispatch_async
或类似方法在任何队列上运行块时,GCD是否提供线程栅栏来保护块调用?我认为它会提供,但据我所知,文档没有给出任何提示。
在 Cocoa-Dev 邮件列表的一封电子邮件中,苹果公司的运行时工程师 Greg Parker(之一)回答了我的一个问题:
既然使用 GCD 没有让我们的头上发生灾难,我认为 dispatch_async() 等函数确实提供了这样的内存屏障。同样,NSOperationQueue、-performSelector:onThread:...等功能也应该提供。对吗?
我期望任何不提供足够内存屏障功能的多处理原语都会大声记录这一事实。dispatch_once() 的存储是缺少内存屏障的文档化示例。OSAtomic 函数的一些也是另一个示例。但几乎所有比这更重量级的东西都应该为任何客户端提供完整的内存屏障。