使用atomic一定是執行緒安全的嗎?

2021-09-08 01:22:07 字數 921 閱讀 4405

這個問題很少遇到,但是答案當然不是。

atomic在set方法裡加了鎖,防止了多執行緒一直去寫這個property,造成難以預計的數值。但這也只是讀寫的鎖定。跟執行緒安全其實還是差一些。看下面。

@inte***ce monperson : nsobject 

@property (copy) nsstring * firstname; @property (copy) nsstring * lastname; - (nsstring *)fullname; @end thread a: p.firstname = @"rob"; thread b: p.firstname = @"robert"; thread a: label.string = p.firstname; // << uh, oh -- will be robert

但是如果有個c也在寫,d在讀取,d會讀到一些隨機的值(abc修改的值),這就不是執行緒安全的了。最好的方法是使用lock。

thread a:

[p lock]; // << wait for it… … … …

// thread b now cannot access

pp.firstname = @"rob";

nsstring fullname = p.fullname;

[p unlock];

// thread b can now access plabel.string = fullname; thread b: [p lock]; // << wait for it… … … … // thread a now cannot access p… [p unlock];

atomic有個很大的問題是很慢,要比nonatomic慢20倍。

當然最後建議這種數值數值變化可以讓伺服器來做。

用atomic一定是執行緒安全的嗎

void setprop nsstring newvalue 按我理解 1.此處的執行緒安全是就getter,setter而言的。比如對於 property nonatomic,copy nsstring str 當呼叫self.str hello,guy 如果是多執行緒,在乙個執行緒執行sette...

atomic一定執行緒安全嗎

atomic只是保證了操作的原子性,原子操作即乙個操作不可再分。atomic只是對讀寫操作進行了加鎖,保證了多執行緒開發時乙個讀寫操作完成之後才能進行下乙個讀寫操作 atomic和執行緒安全沒有太大的關係,舉例 如果a,b,c都在進行寫的操作,d進行讀操作,d就會讀取到隨機的值 abc不清楚誰修改的...

執行緒安全性 原子性 atomic

定義 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式,或者這些程序將如何交替執行,並且在主調 中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼就稱這個類時安全的 執行緒安全性,主要體現在三個方面,分別是 原子性 提供了互斥訪問,同一時刻只能有乙個執行緒對它進行訪問 可見性 乙...