4

我的班级有一个属性:

@property (readwrite, atomic) BOOL IsTrue;

我对atomic限定符的理解是@synthesize属性的 d getter/setter 将保证来自不同线程的访问序列化,即如果生产者线程 A 正在set处理属性值,它将被允许在消费者线程 B 和 C 之前完成设置操作允许get属性值(顺便说一句,atomic对于单字节/ POD 类型甚至是必需的?)。

volatile关键字是否提供任何进一步的数据完整性?

@property (readwrite, atomic) volatile BOOL IsTrue;

我特别强调的是,消费者线程是否有可能在不使用的情况下获得过时的值volatile

4

1 回答 1

8

消费者线程是否有可能在不使用 volatile 的情况下获得过时的值?

不。从客户的角度来看,该属性只是一个 getter/setter 方法对。所以任何客户端都需要调用objc_msgSend来设置或检索一个值。函数调用是 C 中的同步点,因此无法获取过时的值(与直接内存访问一样,这volatile可能会有所帮助)。

@synthesize 的访问器将负责序列化对底层值的访问。

于 2012-11-06T09:52:09.423 回答