日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】atomic简介

發(fā)布時間:2023/12/16 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】atomic简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

atomic簡介
C++11起提供了atomic,可以使用它定義一個原子類型。
原型:

template< class T > struct atomic;


成員函數(shù):
atomic提供了一些與原子操作有關(guān)的成員函數(shù)。

成員函數(shù)說明
store原子地以非原子對象替換原子對象的值
load?? ?原子地獲得原子對象的值


詳見:https://zh.cppreference.com/w/cpp/atomic/atomic

特化成員函數(shù):
所謂特化函數(shù),也就是atomic提供的,可以進行原子操作的函數(shù)。使用這些函數(shù),進行的操作,都是原子的。

特化成員函數(shù)?說明
fetch_add原子地將參數(shù)加到存儲于原子對象的值,并返回先前保有的值
fetch_sub原子地進行參數(shù)和原子對象的值的逐位與,并獲得先前保有的值
fetch_or原子地進行參數(shù)和原子對象的值的逐位或,并獲得先前保有的值
fetch_xor原子地進行參數(shù)和原子對象的值的逐位異或,并獲得先前保有的值
operator++令原子值增加一
operator++(int)?令原子值增加一
operator–令原子值減少一
operator–(int)令原子值減少一
............


詳見:https://zh.cppreference.com/w/cpp/atomic/atomic

為什么要定義一個原子類型?
舉個例子,int64_t類型,在32位機器上為非原子操作。更新時該類型的值時,需要進行兩步操作(高32位、低32位)。如果多線程操作該類型的變量,且在操作時未加鎖,可能會出現(xiàn)讀臟數(shù)據(jù)的情況。

解決該問題的話,加鎖,或者提供一種定義原子類型的方法。

使用
定義一個原子類型

// 定一個int64_t的原子類型 std::atomic<int64_t> value;


自加操作(原子)

// atomic提供的特化成員函數(shù),已經(jīng)重載了++運算符 // 所以該操作時原子的 value++



讀取變量值(原子)

// 此處的原子,指的是讀取value的值,這一步。 // 而不是,將value的值賦給x。int64_t x = value.load(std::memory_order_relaxed);


更新變量(原子)

int64_t x = 10; value.store(x,std::memory_order_relaxed)

對于std::memory_order_relaxed 的說明:(C++11多線程 內(nèi)存序(std::memory_order_relaxed)):

std::memory_order_relaxed在此處可以理解為僅僅保持原子性對于不同的線程,std::memory_order_relaxed內(nèi)存序不保證讀取值的同步,但若同一個線程已經(jīng)讀取到某個值a,則后續(xù)的load不能讀取到比a更老的值。


參考資料
http://www.cplusplus.com/reference/atomic/atomic/store/
https://zh.cppreference.com/w/cpp/atomic/atomic
————————————————
版權(quán)聲明:本文為CSDN博主「林多」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zxc024000/article/details/100767211

總結(jié)

以上是生活随笔為你收集整理的【C++】atomic简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。