同步與原子操作

2021-08-25 22:44:47 字數 631 閱讀 7186

這道題做錯了,做個筆記。

同步是害怕在操作過程的時候被其他執行緒也進行讀取操作,一旦是原子性的操作就不會發生這種情況。

因為一步到位的操作,其他執行緒不可能在中間干涉。另外三項都有讀取、操作兩個步驟,而x=1則是原子性操作。

前三個不是原子操作,最後乙個直接賦值,為原子操作。

原子(atom)本意是「不能被進一步分割的最小粒子」,而原子操作(atomic operation)意為"不可被中斷的乙個或一系列操作" 。原子操作就是不可再分的操作。在多執行緒程式中原子操作是乙個非常重要的概念,它常常用來實現一些同步機制。由不可分性可知,原子性是拒絕多執行緒操作的(只有分解為多步操作,多個執行緒才能對其操作:就像乙個盒子裡有多個兵乓球,多個人能夠從盒子裡拿桌球;如果盒子只有乙個兵乓球,乙個人拿的話,其他人就拿不到了;這就是原子性,桌球就具有原子性,人就相當於原子)。

原子操作指的是不可再分的指令操作,即在執行原子操作時不可能被打斷,要麼原子操作沒有執行,要麼已經執行完畢。

原子操作的實現必須需要硬體的支援,作業系統僅僅是在硬體指令的基礎之上進行一次封裝。對於沒有實現原子操作的硬體,則需要作業系統從軟體演算法層面進行支援。

原子變數與原子操作

1.原子操作的速度要快於臨界區,event,互斥量,如果多個執行緒同時寫乙個變數時,最方便的就是原子操作。原子操作函式,解決多執行緒安全 2.原子變數也是為了解決執行緒衝突問題,如果兩個執行緒同時訪問同乙個變數,乙個執行緒改變了這個變數,另乙個執行緒就會出現一些bug。3.release和debug...

Linux的原子操作與同步機制

b linux的原子操作與同步機制 b b 併發問題 b 例如c語言語句 count 在未經編譯器優化時生成的彙編 為多條機器指令來實現的。b 例子 b 假設count變數初始值為0。程序1執行完 mov eax,count 後,暫存器eax內儲存了count的值0。此時,程序2被排程執行,搶占了程...

原子操作與原子型別

多執行緒是併發程式設計中不可或缺的部分,而所謂原子操作,也就是指多執行緒中 最小的且不可並行化的 操作,如果乙個共享資源的操作時原子操作的話,意味著多個執行緒訪問該資源時,有且僅有乙個執行緒在對這個資源進行操作。通常情況下,原子操作都是通過 互斥 來實現的,例如mutex。這種操作在開發當中使用相當...