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

Do we need to declare a property atomic if we use GCD?

GrandCentralDispatch关心原子和非原子关键字,还是我们必须指定原子关键字?

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


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

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

简而言之,在使用GCD时,不要假设应该使用atomic。事实上,如果您使用GCD,这通常会消除对atomic的需求,事实上,这将不必要,并对GCD的性能产生不利影响。所以,若您有一些属性是从多个线程访问的,您应该对其进行同步,但选择使用哪种同步技术是特定情况的特定细节的函数,而gcd通常是一个性能更高、更完整的解决方案。