atomic的一些理解

2021-08-18 07:02:21 字數 947 閱讀 5954

在多執行緒中,atomic只保證getter、setter方法安全,並不保證其它操作,例如字串拼接,陣列移除元素等

-(void)setmstrorigin:(nsstring *)mstrorigin

}}-(nsstring *)mstrorigin

}

atomic:執行緒安全,需要消耗大量的資源

nonatomic:非執行緒安全,適合記憶體小的移動裝置

synchronized 與 atomic

互斥鎖:當上乙個執行緒的任務沒有執行完畢的時候(被鎖住),那麼下乙個執行緒會進入睡眠狀態等待任務執行完畢,當上乙個執行緒的任務執行完畢,下乙個執行緒會自動喚醒然後執行任務。

自旋鎖:當上乙個執行緒的任務沒有執行完畢的時候(被鎖住),那麼下乙個執行緒會一直等待(不會睡眠),當上乙個執行緒的任務執行完畢,下乙個執行緒會立即執行。

自旋鎖應用場景:

比較適合做一些不耗時的操作

synchronized:互斥鎖

atomic:自旋鎖

共同點:都能保證同一時刻只能有乙個執行緒操作鎖住的**執行緒安全,需要消耗大量的資源

nonatomic:非執行緒安全,適合記憶體小的移動裝置

synchronized 與 atomic

互斥鎖:當上乙個執行緒的任務沒有執行完畢的時候(被鎖住),那麼下乙個執行緒會進入睡眠狀態等待任務執行完畢,當上乙個執行緒的任務執行完畢,下乙個執行緒會自動喚醒然後執行任務。

自旋鎖:當上乙個執行緒的任務沒有執行完畢的時候(被鎖住),那麼下乙個執行緒會一直等待(不會睡眠),當上乙個執行緒的任務執行完畢,下乙個執行緒會立即執行。

自旋鎖應用場景:

比較適合做一些不耗時的操作

synchronized:互斥鎖

atomic:老版本底層是 自旋鎖,新版本不再是了

共同點:都能保證同一時刻只能有乙個執行緒操作鎖住的**

堆疊的一些理解

堆疊是一種執行 後進先出 演算法的資料結構。設想有乙個直徑不大 一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律 先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以 先進後出 就是這種結構的特點。堆疊就是這...

const 的一些理解

以前覺得自己對const還是有些理解的,今天一兄弟問了乙個問題才讓我對這個東西又加深了些了解 class temp public void output void func const temp a a.output 就這麼簡單乙個東西,眨眼一看,沒什麼問題,但是編譯是不會通過的,因為func呼叫了...

linuxI O的一些理解

同步i o 阻塞i o 非同步i o 非阻塞 同步,非同步的概念本來是通訊領域的,很難解釋清楚,但我肯定他跟阻塞非阻塞完全沒有任何關係。在這裡的同步非同步,我個人的理解是函式呼叫的時候的同步非同步。其實同步方式很好理解,例如你呼叫乙個function,當這個function執行完後,這個方法實現的功...