第十一節std atomic原子操作

2021-10-09 12:04:27 字數 2326 閱讀 2108

互斥量:多執行緒程式設計中保護共享資料:鎖,操作共享資料,開鎖

有兩個執行緒,對乙個變數進行操作,這個執行緒讀,另乙個執行緒往變數中寫值。

int atomvalue =

5;

讀執行緒a:

int tmpvalue = atomvalue;

//atomvalue代表的是多個執行緒之間要共享的變數

寫執行緒b:

atomvalue =

6;

結果:讀出乙個不可預料的中間值

原子操作:

可以把原子操作理解為一種:不需要用到互斥量加鎖(無鎖)技術的多執行緒程式設計方式

多執行緒中不會被打斷程式執行片段

互斥量:加鎖一般針對乙個**段(幾行**)

原子操作:針對的一般都是乙個變數,而不是乙個**段

一般指「不可分割的操作」

std::atomic來代表原子操作,std::atomic是個類模板。其實std::atomic這個東西是用來封裝某個型別的值的

#include

#include

std::atomic<

int> g_mycount;

void

mythread()

return;}

intmain()

結果:

兩個執行緒執行完畢,最終的g_mycount的結果是: 20000000
注意:

不能寫成std::atomicg_mycount = 0;,否則

error: use of deleted function 『std::atomic::atomic(const std::atomic&)』

std::atomic g_mycount = 0;

std::atomic<

bool

> g_ifend;

void

mythread()

cout <<

"thread id = "

<< std::this_thread::

get_id()

<<

"執行結束..."

<< endl;

return;}

intmain()

結果

thread id

= thread id

= 140104806115072140104797722368執行中...執行中...

thread id

= 140104806115072執行中...

thread id

= 140104797722368執行中...

thread id

= 140104806115072執行中...

thread id

= 140104797722368執行中...

thread id

= 140104806115072執行中...

thread id

= 140104797722368執行中...

thread id

= 140104806115072執行中...

thread id

= 140104797722368執行中...

thread id

= 140104806115072執行結束...

thread id

= 140104797722368執行結束...

程式執行完畢,退出

一般用於計數或者統計(累計發出了多少個資料報,累計接受到了多少資料報)

一般atomic原子操作,針對++,–,+=,&=,|=,^=

cout << atm << endl;讀atm是個原子操作,但整個一行**並不是原子操作;螢幕看到的atm並不是atm的最新值

atuo atm2 = atm;
原子變數這種定義不允許,顯示「嘗試引用已刪除的函式」

load()以原子方式讀atomic物件的值:

atomic<

int>

atm2

(atm.

load()

);

store()以原子方式寫入內容:

atm2.

store()

;

第十一節 過載 11

php4中已經有了過載的語法來建立對於外www.cppcns.com部物件模型的對映,就像j a和com那樣.php5帶來了強大的物件導向過載,允許程式設計師建立自定義的行為來訪問屬性和呼叫方法.過載可以通過 get,set,and call幾個特殊方法來進行.當zend引擎試圖訪問乙個成員並沒有找...

第十一節,命名空間namespace

命名空間可以把不同的方法分散到不同的檔案去實現,如果你會objective c,他的作用和裡面的類目有異曲同工之妙。當然了也有很多不同的地方,首先要明白的是,命名空間並不是乙個類,你擴充套件他的方法並不是和類目一樣在擴充套件乙個類的方法。如果你學過net開發,獲取你會對這個命名空間有更好的理解。na...

MySql 第十一節 事務隔離級別

同乙個應用程式中的多個事務或不同應用程式中的多個事務在同乙個資料集上併發執行時,可能會出現許多意外的問題,這些問題可分為如下三種型別 不可重複讀 non repeatable read 已知有兩個事務a和b,a 多次讀取同一資料,b 在a多次讀取的過程中對資料作了修改並提交,導致a多次讀取同一資料時...