原子操作與原子型別

2021-10-12 07:27:17 字數 860 閱讀 2752

多執行緒是併發程式設計中不可或缺的部分,而所謂原子操作,也就是指多執行緒中「最小的且不可並行化的」操作,如果乙個共享資源的操作時原子操作的話,意味著多個執行緒訪問該資源時,有且僅有乙個執行緒在對這個資源進行操作。通常情況下,原子操作都是通過「互斥」來實現的,例如mutex。這種操作在開發當中使用相當頻繁所以我們不做討論。但是是否還有其他更便於使用的方式呢?c++11給出了答案,就是原子型別。

我們可以像下面這樣定義乙個原子型別:

std::atomic t;
其中,atomic是原子型別的類模板,但是,c++11同樣也提供了一些內建型別方便直接使用,內建型別如下:

原子型別可以直接對普通型別進行賦值,也就是說,下述操作是支援的:

atomic<

float

> af

;float f = af;

atomic<

int> a;

int b = a;

//#1

a =1

;//#2

#include

#include

#include

#include

using

namespace std;

atomic_llong total

;void

func

(int)}

intmain()

原子變數與原子操作

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

java併發程式設計基礎 原子類與原子更新

1 什麼是原子類 原子類可以認為其操作都是不可分割 2 為什麼要有原子類 對多執行緒訪問同乙個變數,我們需要加鎖,而鎖是比較消耗效能的,jdk1.5之後,新增的原子操作類提供了一種用法簡單 效能高效 執行緒安全地更新乙個變數的方式,這些類同樣位於juc包下的atomic包下,發展到jdk1.8,該包...

原子性,原子操作

舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在...