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