2011-07-27 45 views
2

我通過NSBlockOperation在我的ObjC程序中實現多線程。在塊中調用的某些方法調用必須是原子的。有沒有辦法標記一個方法原子?

與製作@property非原子/原子類似。

無論如何要將該方法標記爲原子(而不是使用@synthronized)?

回答

3

不,反正也沒有區別。當您聲明@propertyatomic時,它只會創建原子訪問器,如果您還訪問了@synthesize。否則,只是通知客戶端代碼它是原子的,並且您負責編寫原子訪問器(使用@synchronized或其他鎖)。

因此,即使您可以將方法聲明爲原子,您仍然必須自己編寫原子代碼。

3

不。屬性原子的標記實際上只是暗示@synthesize它爲該屬性發出的代碼應使用沿着@synchronized行的內容來確保對該屬性的訪問以原子方式運行。

請注意,實際上,合成的吸氣器/調節器實際上不需要使用@synchronized。例如,如果底層ivar可以在不鎖定的情況下以原子方式讀取/寫入(例如,在許多平臺上爲plain int),則編譯器可能不會生成實際的鎖定。編譯器也可以自由使用任何其他鎖定方法,而不是@synchronized所使用的鎖定方法。

相關問題