有没有办法将方法标记为原子?

时间:2011-07-27 20:28:51

标签: objective-c xcode4 osx-lion

我正在通过NSBlockOperation在我的ObjC程序中实现多线程。在块中调用的一些方法调用必须是原子的。

与制作@property非原子/原子相似。

无论如何将方法标记为原子(而不是使用@synthronized)?

2 个答案:

答案 0 :(得分:3)

不,反正也无济于事。当您将@property声明为atomic时,如果您还@synthesize访问者,它只会创建原子访问者。否则,它只是通知客户端代码它是原子的,并且您负责编写原子访问器(使用@synchronized或其他锁)。

因此,即使您可以将方法声明为原子方法,您仍然必须自己编写原子代码。

答案 1 :(得分:3)

没有。属性atomic的标记实际上只是@synthesize的一个提示,它为该属性发出的代码应该使用@synchronized行的内容来确保对属性的访问以原子方式运行。

请注意,实际上,合成的getter / setter实际上不需要使用@synchronized。例如,如果底层的ivar可以在没有锁的情况下原子地读/写(例如许多平台上的普通int),则编译器可能没有实际的锁定。编译器也可以自由使用任何其他锁定方法,而不是@synchronized使用的方法。