如果我们使用GCD,是否需要声明属性原子?

问题描述 投票:1回答:1

Grand Central Dispatch是否关心原子和非原子关键字,或者我们必须指定原子?

我知道属性声明中的原子和非原子关键字将生成不同的setter和getter,atomic将是线程安全的。

ios objective-c thread-safety grand-central-dispatch atomic
1个回答
3
投票

使用atomic是从多个线程同步正在使用的属性的一种方法。但是有许多机制可以同步来自多个线程的访问,而atomic是一个实用性相当有限的机制。我建议你参考线程编程指南的Synchronization章节,以便更全面地讨论替代方案(甚至无法讨论其他当代模式,例如GCD串行队列和带有自定义并发队列的读写器模式)。

最重要的是,atomic本身既不必要也不足以确保螺纹安全。一般来说,它在处理一些简单的基本数据类型(Booleans,NSInteger)时有一些有限的实用性,但在处理更复杂的逻辑或处理可变对象时是不够的。

简而言之,不要假设每次使用GCD时都应该使用atomic。事实上,如果你使用GCD,那么通常不需要atomic,事实上,这将不必要地和GCD一起对性能产生不利影响。因此,如果您从多个线程访问某些属性,则应该同步它,但是选择使用哪种同步技术是特定情况的具体细节的函数,并且GCD通常更高效,更完整解。

© www.soinside.com 2019 - 2024. All rights reserved.