atomic與nonatomic的區別

2022-08-16 16:18:19 字數 718 閱讀 8204

原子性(atomic):某操作具備整體性,也就是說,系統其他部分無法觀察到其中間步驟所生成的臨時結果,而只能看到操作前與操作後的結果,那麼就稱改操作就是「原子的」(atomic),或者說,該操作具備「原子性」(atomicity)。原子性並不意味著執行緒絕對安全,它會增加正確的機率,能夠更好的避免執行緒錯誤,但仍舊是不安全的。

非原子性(nonatomic):與原子性相反,能觀察到其中間步驟所生成的臨時結果,且不使用同步鎖,效率高一些,因為使用同步鎖會消耗效能。

區別:具備atomic特性的獲取方法通過鎖定機制來確保其操作原子性。這也就是說,如果兩個執行緒讀寫同一屬性,那麼不論何時,總能看到有效的屬性值。若是不加鎖的話(或者說使用nonatomic語義),那麼當其中乙個執行緒正在修改某屬性值時,另外乙個執行緒也許會突然闖入,把尚未修改好的屬性值讀取出來。發生這種情況時,執行緒讀到的屬性值可能不對。

如果開發過ios程式,你就會發現,其中的屬性都宣告為nonatomic。這樣做的歷史原因是:在ios中使用同步鎖的開銷較大,這會帶來效能問題。一般情況下並不要求屬性必須是「原子的」,因為這並不能保證「執行緒安全」(thread safety),若要實現「執行緒安全」的操作,還需採用更為深層的鎖定機制才行。例如,乙個執行緒在連續多次讀取某屬性值的過程中有別的執行緒在同時改寫該值,那麼即便將屬性宣告為atomic,也還是會讀到不同的屬性值。因此,開發ios屬性時一般都會使用nonatomic屬性。但是在開發mac os x程式時,使用atomic屬性通常都不會有效能瓶頸。        

atomic 加鎖操作

property atomic,strong nsstring name setter void setname name getter void name 為什麼加鎖 多執行緒的安全隱患 資源共享 一塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 ...

原子操作 atomic

所謂的原子操作,取的就是 原子是最小的 不可分割的最小個體 的意義,它表示在多個執行緒訪問同乙個全域性資源的時候,能夠確保所有其他的執行緒都不在同一時間內訪問相同的資源。也就是他確保了在同一時刻只有唯一的執行緒對這個資源進行訪問。這有點類似互斥物件對共享資源的訪問的保護,但是原子操作更加接近底層,因...

原子操作atomic

c 中有atomic類和atomic flag兩個類,其中atomic類用於定義乙個原子操作,atomic flag定義一些與原子操作相關的函式 如下操作 atomic原子操作.cpp 定義控制台應用程式的入口點。一般的操作如上,我們開啟兩個執行緒,定義乙個全域性變數n,定義乙個執行緒函式,想要執行...