我通過NSBlockOperation在我的ObjC程序中實現多線程。在塊中調用的某些方法調用必須是原子的。有沒有辦法標記一個方法原子?
與製作@property非原子/原子類似。
無論如何要將該方法標記爲原子(而不是使用@synthronized
)?
我通過NSBlockOperation在我的ObjC程序中實現多線程。在塊中調用的某些方法調用必須是原子的。有沒有辦法標記一個方法原子?
與製作@property非原子/原子類似。
無論如何要將該方法標記爲原子(而不是使用@synthronized
)?
不,反正也沒有區別。當您聲明@property
爲atomic
時,它只會創建原子訪問器,如果您還訪問了@synthesize
。否則,只是通知客戶端代碼它是原子的,並且您負責編寫原子訪問器(使用@synchronized
或其他鎖)。
因此,即使您可以將方法聲明爲原子,您仍然必須自己編寫原子代碼。
不。屬性原子的標記實際上只是暗示@synthesize
它爲該屬性發出的代碼應使用沿着@synchronized
行的內容來確保對該屬性的訪問以原子方式運行。
請注意,實際上,合成的吸氣器/調節器實際上不需要使用@synchronized
。例如,如果底層ivar可以在不鎖定的情況下以原子方式讀取/寫入(例如,在許多平臺上爲plain int),則編譯器可能不會生成實際的鎖定。編譯器也可以自由使用任何其他鎖定方法,而不是@synchronized
所使用的鎖定方法。