我有類:Objective-C的併發處理
ClassX.m
@property (assign) BOOL wasProcessed;
-(void) methodA { //<- this can be called many times in short period of time
dispatch_async(dispatch_get_main_queue(), ^{
[self methodB];
});
}
- (void) methodB {
if (!self.wasProcessed) {
self.wasProcessed = YES;
//... some code
}
}
由於dispatch_async使用這樣幾個電話來的methodB可以同時在同一時間進行處理,下面的代碼必須是原子的:
if (!self.wasProcessed) {
self.wasProcessed = YES; //e.g two calls can enter here before setting YES and it would be bad because I want to process it only one time
這兩條線怎麼可以做成原子(檢查和設置變量)?我不想讓「self.wasProcessed = YES;」之後的原子碼所以如果移動到@synchronize(self)將不是很好的解決方案。如果我的想法有什麼問題,請指出,因爲我對這些主題的經驗不是很豐富,謝謝。
我認爲會有一些解決方案的問題,但它似乎工作正常。謝謝。 – regularUser