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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++11 并发指南六(atomic 类型详解三 std::atomic (续))

發布時間:2025/3/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11 并发指南六(atomic 类型详解三 std::atomic (续)) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++11 并發指南六( <atomic> 類型詳解二 std::atomic ) 介紹了基本的原子類型 std::atomic 的用法,本節我會給大家介紹C++11 標準庫中的 std::atomic 針對整形(integral)和指針類型的特化版本做了哪些改進。

總地來說,C++11 標準庫中的 std::atomic 針對整形(integral)和指針類型的特化版本新增了一些算術運算和邏輯運算操作。具體如下:

?
integral fetch_add(integral, memory_order = memory_order_seq_cst)volatile; integral fetch_add(integral, memory_order = memory_order_seq_cst); integral fetch_sub(integral, memory_order = memory_order_seq_cst)volatile; integral fetch_sub(integral, memory_order = memory_order_seq_cst); integral fetch_and(integral, memory_order = memory_order_seq_cst)volatile; integral fetch_and(integral, memory_order = memory_order_seq_cst); integral fetch_or(integral, memory_order = memory_order_seq_cst)volatile; integral fetch_or(integral, memory_order = memory_order_seq_cst); integral fetch_xor(integral, memory_order = memory_order_seq_cst)volatile; integral fetch_xor(integral, memory_order = memory_order_seq_cst); integral operator++(int)volatile; integral operator++(int); integral operator--(int)volatile; integral operator--(int); integral operator++()volatile; integral operator++(); integral operator--()volatile; integral operator--(); integral operator+=(integral)volatile; integral operator+=(integral); integral operator-=(integral)volatile; integral operator-=(integral); integral operator&=(integral)volatile; integral operator&=(integral); integral operator|=(integral)volatile; integral operator|=(integral); integral operator^=(integral)volatile; integral operator^=(integral);

?下面我們來簡單介紹以上的 std::atomic 特化版本的成員函數。

fetch_add if T is integral (1)if T is pointer (2)
T fetch_add (T val, memory_order sync = memory_order_seq_cst) volatile noexcept; T fetch_add (T val, memory_order sync = memory_order_seq_cst) noexcept;
T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) volatile noexcept; T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) noexcept;
將原子對象的封裝值加 val,并返回原子對象的舊值(適用于整形和指針類型的 std::atomic 特化版本),整個過程是原子的。sync 參數指定內存序: Memory Order 值Memory Order 類型
memory_order_relaxedRelaxed
memory_order_consumeConsume
memory_order_acquireAcquire
memory_order_releaseRelease
memory_order_acq_relAcquire/Release
memory_order_seq_cstSequentially consistent
另外,如果第二個參數不指定(取默認參數 memory_order_seq_cst),則 fetch_add 相當與 std::atomic::operator+=。 fetch_sub if T is integral (1)if T is pointer (2)
T fetch_sub (T val, memory_order sync = memory_order_seq_cst) volatile noexcept; T fetch_sub (T val, memory_order sync = memory_order_seq_cst) noexcept;
T fetch_sub (ptrdiff_t val, memory_order sync = memory_order_seq_cst) volatile noexcept; T fetch_sub (ptrdiff_t val, memory_order sync = memory_order_seq_cst) noexcept;
將原子對象的封裝值減 val,并返回原子對象的舊值(適用于整形和指針類型的 std::atomic 特化版本),整個過程是原子的。sync 參數指定內存序: Memory Order 值Memory Order 類型
memory_order_relaxedRelaxed
memory_order_consumeConsume
memory_order_acquireAcquire
memory_order_releaseRelease
memory_order_acq_relAcquire/Release
memory_order_seq_cstSequentially consistent
另外,如果第二個參數不指定(取默認參數 memory_order_seq_cst),則 fetch_sub 相當與 std::atomic::operator-=。 fetch_and ?
T fetch_and (T val, memory_order sync = memory_order_seq_cst)volatile noexcept; T fetch_and (T val, memory_order sync = memory_order_seq_cst)noexcept;

?

將原子對象的封裝值按位與 val,并返回原子對象的舊值(只適用于整型的 std::atomic 特化版本),整個過程是原子的。sync 參數指定內存序: Memory Order 值Memory Order 類型
memory_order_relaxedRelaxed
memory_order_consumeConsume
memory_order_acquireAcquire
memory_order_releaseRelease
memory_order_acq_relAcquire/Release
memory_order_seq_cstSequentially consistent
另外,如果第二個參數不指定(取默認參數 memory_order_seq_cst),則 fetch_add 相當與 std::atomic::operator&=。 fetch_or ?
T fetch_or (T val, memory_order sync = memory_order_seq_cst)volatile noexcept; T fetch_or (T val, memory_order sync = memory_order_seq_cst)noexcept;

?

將原子對象的封裝值按位或 val,并返回原子對象的舊值(只適用于整型的 std::atomic 特化版本),整個過程是原子的。sync 參數指定內存序: Memory Order 值Memory Order 類型
memory_order_relaxedRelaxed
memory_order_consumeConsume
memory_order_acquireAcquire
memory_order_releaseRelease
memory_order_acq_relAcquire/Release
memory_order_seq_cstSequentially consistent
另外,如果第二個參數不指定(取默認參數 memory_order_seq_cst),則 fetch_or 相當與 std::atomic::operator|=。 fetch_xor ?
T fetch_xor (T val, memory_order sync = memory_order_seq_cst)volatile noexcept; T fetch_xor (T val, memory_order sync = memory_order_seq_cst)noexcept;
將原子對象的封裝值按位異或 val,并返回原子對象的舊值(只適用于整型的 std::atomic 特化版本),整個過程是原子的。sync 參數指定內存序: Memory Order 值Memory Order 類型
memory_order_relaxedRelaxed
memory_order_consumeConsume
memory_order_acquireAcquire
memory_order_releaseRelease
memory_order_acq_relAcquire/Release
memory_order_seq_cstSequentially consistent
另外,如果第二個參數不指定(取默認參數 memory_order_seq_cst),則 fetch_xor 相當與 std::atomic::operator^=。 operator++ pre-increment (1)post-increment (2)
T operator++() volatile noexcept; T operator++() noexcept;
T operator++ (int) volatile noexcept; T operator++ (int) noexcept;
自增運算符重載, 第一種形式 (1) 返回自增后的值(即前綴++),第二種形式(2) 返回自增前的值(即后綴++),適用于整形和指針類型的 std::atomic 特化版本。 operator--自減運算符重載, 第一種形式 (1) 返回自后的值(即前綴--),第二種形式(2) 返回自前的值(即后綴--),適用于整形和指針類型的 std::atomic 特化版本。 atomic::operator (comp. assign.)復合賦值運算符重載,主要包含以下形式:
if T is integral (1)if T is pointer (2)
T operator+= (T val) volatile noexcept; T operator+= (T val) noexcept; T operator-= (T val) volatile noexcept; T operator-= (T val) noexcept; T operator&= (T val) volatile noexcept; T operator&= (T val) noexcept; T operator|= (T val) volatile noexcept; T operator|= (T val) noexcept; T operator^= (T val) volatile noexcept; T operator^= (T val) noexcept;
T operator+= (ptrdiff_t val) volatile noexcept; T operator+= (ptrdiff_t val) noexcept; T operator-= (ptrdiff_t val) volatile noexcept; T operator-= (ptrdiff_t val) noexcept;

以上各個 operator 都會有對應的 fetch_* 操作,詳細見下表:

操作符成員函數支持類型復合賦值等價于整型指針類型其他類型
+atomic::operator+=atomic::fetch_add
-atomic::operator-=atomic::fetch_sub
&atomic::operator&=atomic::fetch_and
|atomic::operator|=atomic::fetch_or
^atomic::operator^=atomic::fetch_xor

好了,本節先介紹這里,下一節我會介紹 C++11 中 C 風格的原子操作 API。

總結

以上是生活随笔為你收集整理的C++11 并发指南六(atomic 类型详解三 std::atomic (续))的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。