volatile属性是否是原子属性所必需的?

时间:2012-11-06 09:40:28

标签: objective-c thread-safety

我的班级有一个属性:

@property (readwrite, atomic) BOOL IsTrue;

我对atomic限定符的理解是,属性的​​@synthesize d getter / setter将保证来自不同线程的访问序列化,即如果生成器线程A是set ting属性值允许在消费者线程B和C允许get属性值之前完成设置操作(在这里,对于单字节/ POD类型,即使是atomic也是如此? )。

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

@property (readwrite, atomic) volatile BOOL IsTrue;

我特别推动的是,消费者线程是否有可能在不使用volatile的情况下获取过时的值?

1 个答案:

答案 0 :(得分:8)

  

消费者线程是否有可能过时   没有使用volatile的值?

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

@ synthesize'd访问器将负责序列化对基础值的访问。