我有兩個線程訪問同一組屬性,但一個只讀取屬性,另一個只寫入屬性。從不同的線程訪問屬性
以下哪些屬性需要同步讀取操作,哪些必須同步寫入操作?
@property (nonatomic) int myInt;
@property (nonatomic) NSInteger myInteger;
@property (nonatomic) CGImageRef cgImage;
@property (nonatomic, strong) UIImage *image;
@property (nonatomic, strong) NSMutableArray *array;
@property (nonatomic, strong) UIViewController *controller;
我的第一個直覺就是所有的讀寫操作都需要同步。但是,由於一個線程總是在寫,而另一個線程總是在讀,所以我不確定自己。當然,總是同步是「安全的」,因爲我不確定,但我想知道什麼是真正的正確?
出於某種原因,我有這種感覺,也許myInt和myInteger不需要同步讀取和寫入,因爲它們是通過值....?
我將在我的應用程序中使用的特定示例是,我有一個線程寫入和一個線程讀取的浮點數。這聽起來像是我最好的選擇是在這種情況下讓它成爲原子,而不用擔心同步它。在我的例子中,寫入線程是一個後臺線程,它會在更新的過程密集型任務的進度百分比,而讀線程是主線程,將更新與完成的百分比加載酒吧。 – MikeS 2012-08-10 18:18:04
@MikeS如果它只是一個原子'float'財產,也沒有依賴性或副作用的特性改變,那麼「是」,這將確保您的讀取/寫入'通過存取方法float'從沒部分書面的國家。原子工作適合這個簡單的情況。這將適用於任何POD或合成的原子訪問器(它也爲您執行保留/自動釋放週期)。這是關於他們的效用的程度,我發現。 – justin 2012-08-10 18:24:18