原子操作 atomic

2021-08-21 16:59:38 字數 944 閱讀 6014

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

原子型別物件的主要特點就是從不同執行緒訪問不會導致資料競爭(data race)。因此從不同執行緒訪問某個原子物件是良性 (well-defined) 行為,而通常對於非原子型別而言,併發訪問某個物件(如果不做任何同步操作)會導致未定義 (undifined) 行為發生。

#include

#include

#include

#include

using

namespace std;

atomic<

int>

cnt(0)

;void

fun()}

intmain()

for(

auto

&th : threads)

th.join()

; clock_t end_time =

clock()

; cout <<

"running time is: "

<<

static_cast

<

double

>

(end_time-start_time)

/clocks_per_sec*

1000

<<

"ms"

<< endl;

system

("pause");

return0;

}

原子操作atomic

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

atomic原子操作

atomic原子操作在一些場景下,相比於其他的併發原語,效能更優 舉個例子 假設你想在程式中使用乙個標誌 flag,比如乙個 bool 型別的變數 來標識乙個定時任務是否已經啟動執行了,你會怎麼做呢?我們先來看看加鎖的方法。如果使用 mutex 和 rwmutex,在讀取和設定這個標誌的時候加鎖,是...

Atomic原子操作類詳解

1 基本介紹 atomic,是一種採用樂觀鎖方式實現執行緒安全的 可以高效保證執行緒安全的去更新基本變數,陣列,引用型別 其實現的底層原理是cas 底層操作邏輯 cas v,o,n 三個值分別是 v記憶體位址存放的實際值 o預期的值 n更新的新值 當v o表示沒有被其他執行緒更改過,沒有衝突進行更新...