我正在通过 NSBlockOperation 在我的 ObjC 程序中实现多线程。在块内调用的某些方法调用必须是原子的。
类似于制作@property 非原子/原子。
无论如何将方法标记为原子(而不是使用@synthronized
)?
我正在通过 NSBlockOperation 在我的 ObjC 程序中实现多线程。在块内调用的某些方法调用必须是原子的。
类似于制作@property 非原子/原子。
无论如何将方法标记为原子(而不是使用@synthronized
)?
不,无论如何它不会有什么不同。当您声明 a @property
asatomic
时,如果您也是访问器,它只会创建原子访问@synthesize
器。否则,它只是通知客户端代码它是原子的,并且您负责编写原子的访问器(使用@synchronized
或其他锁)。
因此,即使您可以将方法声明为原子方法,您仍然必须自己编写原子代码。
不。属性原子的标记实际上只是暗示@synthesize
它为该属性发出的代码应该使用类似的东西@synchronized
来确保对该属性的访问行为是原子的。
请注意,在实践中,合成的 getter/setter 不需要实际使用@synchronized
. 例如,如果底层 ivar 可以在没有锁的情况下以原子方式读取/写入(例如,许多平台上的普通 int),则编译器可能不会生成实际的锁定。编译器也可以自由使用任何其他锁定方法,而不是@synchronized
.