【发布时间】:2013-09-06 23:34:15
【问题描述】:
在 Android 中,我可以安全地从不同线程访问和修改原始类型。我用它在我的 OpenGL 绘制循环和在主线程 Android UI 中修改的用户设置之间共享数据。通过将每个设置存储在原始类型中并使每个设置独立于其他值,在不使用锁或 synchronize 关键字的情况下修改所有这些变量是线程安全的。
在 Objective-C 中也是如此吗?我读到将 atomic 放在变量上实质上会导致合成的 getter 和 setter 使用锁,类似于在 Java 中使用同步方法。而且我已经读过,这样做的原因是对象在被另一个线程读取时不会被部分修改。
但是原始类型是否可以安全地被部分修改,就像它们在 Java 中一样?如果是这种情况,我似乎可以使用 Java 中的旧范式在线程之间共享数据。但是原子关键字对于原语来说是没有意义的,对吗?
我还读到比使用原子变量更健壮和更快的解决方案是,如果从多个线程访问对象,则在使用它们之前复制它们。但我不确定如何做到这一点。非原子对象在被复制的过程中不会被修改,从而破坏副本吗?
【问题讨论】:
-
为什么不用 atomic 声明原始类型以确保线程安全?
-
@user1256663 我听说它们很慢,我正在编写一个 OpenGL 应用程序。帧率问题。
标签: objective-c multithreading