atomic對int、char、bool等資料結構進行了原子性封裝,在多執行緒環境中,對std::atomic物件的訪問不會造成競爭-冒險。利用std::atomic可實現資料結構的無鎖設計。所謂的原子操作,取的就是「原子是最小的、不可分割的最小個體」的意義,它表示在多個執行緒訪問同乙個全域性資源的時候,能夠確保所有其他的執行緒都不在同一時間內訪問相同的資源。也就是他確保了在同一時刻只有唯一的執行緒對這個資源進行訪問。這有點類似互斥物件對共享資源的訪問的保護,但是原子操作更加接近底層,因而效率更高。
在以往的c++標準中並沒有對原子操作進行規定,我們往往是使用組合語言,或者是借助第三方的執行緒庫,例如intel的pthread來實現。在新標準c++11,引入了原子操作的概念,並通過這個新的標頭檔案提供了多種原子運算元據型別,例如,atomic_bool,atomic_int等等,如果我們在多個執行緒中對這些型別的共享資源進行操作,編譯器將保證這些操作都是原子性的,也就是說,確保任意時刻只有乙個執行緒對這個資源進行訪問,編譯器將保證,多個執行緒訪問這個共享資源的正確性。從而避免了鎖的使用,提高了效率。
加鎖不使用atomic:執行結果:#include #include #include #include #include std::mutex mtx;
size_t count = 0;
void threadfun()
}int main(void)
使用atomic:
執行結果:#include #include #include #include #include std::atomiccount(0);
void threadfun()
int main(void)
總結:
從上面的截圖可以發現,第一張圖用時2439ms,第二張圖用時13ms,使用原子操作能大大的提高程式的執行效率。
C 11 atomic原子操作
在併發多執行緒的程式設計中,不同執行緒間對共享記憶體的競爭是存在一定危險的。所以c 11引入了自己的互斥量的概念來避免在多執行緒的執行 現的問題,那麼對於每次的加鎖解鎖以及其他的操作對於資源的消耗都是一定的,那麼就又引入了std atomic的類模板,實現了原子操作,從而避免了在資料的修改過程中被切...
原子操作 atomic
所謂的原子操作,取的就是 原子是最小的 不可分割的最小個體 的意義,它表示在多個執行緒訪問同乙個全域性資源的時候,能夠確保所有其他的執行緒都不在同一時間內訪問相同的資源。也就是他確保了在同一時刻只有唯一的執行緒對這個資源進行訪問。這有點類似互斥物件對共享資源的訪問的保護,但是原子操作更加接近底層,因...
原子操作atomic
c 中有atomic類和atomic flag兩個類,其中atomic類用於定義乙個原子操作,atomic flag定義一些與原子操作相關的函式 如下操作 atomic原子操作.cpp 定義控制台應用程式的入口點。一般的操作如上,我們開啟兩個執行緒,定義乙個全域性變數n,定義乙個執行緒函式,想要執行...