我的班级有一个属性:
@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
的情况下获取过时的值?
答案 0 :(得分:8)
消费者线程是否有可能过时 没有使用volatile的值?
没有。从客户端的角度来看,该属性只是一个getter / setter方法对。因此,任何客户端都需要调用objc_msgSend
来设置或检索值。函数调用是C中的同步点,因此无法获取过时值(如直接内存访问,volatile
可能有用)。
@ synthesize'd访问器将负责序列化对基础值的访问。