1. 程式人生 > >atomic是絕對的線程安全麽?為什麽?如果不是,那應該如何實現?

atomic是絕對的線程安全麽?為什麽?如果不是,那應該如何實現?

self. 實現 per ted mic 屬性 安全性 apple prop

atomic不是絕對的線程安全。atomic的本意是指屬性的存取方法是線程安全的,並不保證整個對象是線程安全的

@property (atomic, assign) int intA;

//線程A

for (int i = 0; i < 10000; i ++)

{

self.intA = self.intA + 1;

NSLog(@"Thread A: %d\n", self.intA);

}

//線程B

for (int i = 0; i < 10000; i ++)

{

self.intA = self.intA + 1;

NSLog(@"Thread B: %d\n", self.intA);

}

self.intA 是原子操作,但是self.intA = self.intA + 1這個表達式並不是原子操作。
所以線程是不安全的。
threadA 在執行表達式 self.intA之後 self.intA = self.intA + 1;並沒有執行完畢
此時threadB 執行self.intA = self.intA + 1;
再回到threadA時,self.intA的數值就被更新了;所以僅僅使用atomic並不能保證線程安全。

需要用互斥鎖來保證線程安全性。

atomic是絕對的線程安全麽?為什麽?如果不是,那應該如何實現?