亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

      C++關(guān)鍵字整理

      atomic

      #include

      原子操作(atomic): 互斥量的加鎖一般是針對(duì)一個(gè)代碼段,而原子操作針對(duì)的一般都是一個(gè)變量。原子變量既不可復(fù)制亦不可移動(dòng)。(1)它表示在多個(gè)線程訪問同一個(gè)全局資源的時(shí)候,能夠確保所有其他的線程都不在同一時(shí)間內(nèi)訪問相同的資源。也就是他確保了在同一時(shí)刻只有唯一的線程對(duì)這個(gè)資源進(jìn)行訪問。這有點(diǎn)類似互斥對(duì)象對(duì)共享資源的訪問的保護(hù),但是原子操作更加接近底層,因而效率更高。是線程安全的。

      (2)原子數(shù)據(jù)類型不會(huì)發(fā)生數(shù)據(jù)競(jìng)爭(zhēng),能直接用在多線程中而不必我們用戶對(duì)其進(jìn)行添加互斥資源鎖的類型。從實(shí)現(xiàn)上,大家可以理解為這些原子類型內(nèi)部自己加了鎖。

      (3)C++11中所有的原子類都是不允許拷貝、不允許Move的,atomic_flag也不例外。

      (4)C++11 對(duì)常見的原子操作進(jìn)行了抽象,定義出統(tǒng)一的接口,并根據(jù)編譯選項(xiàng)/環(huán)境產(chǎn)生平臺(tái)相關(guān)的實(shí)現(xiàn)。新標(biāo)準(zhǔn)將原子操作定義為atomic模板類的成員函數(shù),囊括了絕大多數(shù)典型的操作——讀、寫、比較、交換等

      contained type

      atomic type

      bool

      atomic_bool

      char

      atomic_char

      signed char

      atomic_schar

      unsigned char

      atomic_uchar

      short

      atomic_short

      unsigned short

      atomic_ushort

      int

      atomic_int

      unsigned int

      atomic_uint

      long

      atomic_long

      unsigned long

      atomic_ulong

      long long

      atomic_llong

      unsigned long long

      atomic_ullong

      wchar_t

      atomic_wchar_t

      char16_t

      atomic_char16_t

      char32_t

      atomic_char32_t

      intmax_t

      atomic_intmax_t

      uintmax_t

      atomic_uintmax_t

      int_leastN_t

      atomic_int_leastN_t

      uint_leastN_t

      atomic_uint_leastN_t

      int_fastN_t

      atomic_int_fastN_t

      uint_fastN_t

      atomic_uint_fastN_t

      intptr_t

      atomic_intptr_t

      uintptr_t

      atomic_uintptr_t

      size_t

      atomic_size_t

      ptrdiff_t

      atomic_ptrdiff_t

      (4)macro

      macro

      relative to types

      ATOMIC_BOOL_LOCK_FREE

      bool

      ATOMIC_CHAR_LOCK_FREE

      char

      signed char

      unsigned char

      ATOMIC_SHORT_LOCK_FREE

      short

      unsigned short

      ATOMIC_INT_LOCK_FREE

      int

      unsigned int

      ATOMIC_LONG_LOCK_FREE

      long

      unsigned long

      ATOMIC_LLONG_LOCK_FREE

      long long

      unsigned long long

      ATOMIC_WCHAR_T_LOCK_FREE

      wchar_t

      ATOMIC_CHAR16_T_LOCK_FREE

      char16_t

      ATOMIC_CHAR32_T_LOCK_FREE

      char32_t

      ATOMIC_POINTER_LOCK_FREE

      U*

      (for any type U)

      (5)memory_order:內(nèi)存順序

      序號(hào)

      意義

      1

      memory_order_relaxed

      寬松模型,不對(duì)執(zhí)行順序做保證

      2

      memory_order_consume

      當(dāng)前線程中,滿足happens-before原則。

      當(dāng)前線程中該原子的所有后續(xù)操作,必須在本條操作完成之后執(zhí)行

      3

      memory_order_acquire

      當(dāng)前線程中,讀操作滿足happens-before原則。

      所有后續(xù)的讀操作必須在本操作完成后執(zhí)行

      4

      memory_order_release

      當(dāng)前線程中,寫操作滿足happens-before原則。

      所有后續(xù)的寫操作必須在本操作完成后執(zhí)行

      5

      memory_order_acq_rel

      當(dāng)前線程中,同時(shí)滿足memory_order_acquire和memory_order_release

      6

      memory_order_seq_cst

      最強(qiáng)約束。全部讀寫都按順序執(zhí)行

      (6)Functions

      (7)std::atomic的限制:trivially copyable(可平凡復(fù)制):一個(gè)類型如果是trivially copyable,則使用memcpy這種方式把它的數(shù)據(jù)從一個(gè)地方拷貝出來會(huì)得到相同的結(jié)果。

      1.沒有non-trivial 的拷貝構(gòu)造函數(shù)

      2.沒有non-trivial的move構(gòu)造函數(shù)

      3.沒有non-trivial的賦值操作符

      4.沒有non-trivial的move賦值操作符

      5.有一個(gè)trivial的析構(gòu)函數(shù)

      std::atomic_flag:最簡(jiǎn)單的原子變量實(shí)例,是對(duì)于bool類型的變量進(jìn)行原子操作,提供了標(biāo)志的管理,標(biāo)志有三種狀態(tài):clear、set和未初始化狀態(tài)。

      接口介紹:

      (1)ATOMIC_FLAG_INIT:用于給atomic_flag變量賦初值,如果定義后為賦值,則狀態(tài)是不確定的。被這個(gè)賦值后的狀態(tài)為false。

      (2)test_and_set() :接口函數(shù),調(diào)用后狀態(tài)變?yōu)閠rue,并返回改變狀態(tài)前的狀態(tài)值。

      (3)clear() : 接口函數(shù),調(diào)用后狀態(tài)變?yōu)閒alse。

      #include

      #include

      #include

      #include

      std::atomic_flag lock = ATOMIC_FLAG_INIT;

      int gcnt = 0;

      void f(int n)

      {

      for (int cnt = 0; cnt < 100; ++cnt) {

      while (lock.test_and_set(std::memory_order_acquire)) // 獲得鎖

      ; // 自旋

      std::cout << "Output from thread " << n << '';

      gcnt++;

      lock.clear(std::memory_order_release); // 釋放鎖

      }

      }

      int main()

      {

      std::vector v;

      for (int n = 0; n < 10; ++n) {

      v.emplace_back(f, n);

      }

      for (auto& t : v) {

      t.join();

      }

      }

      自旋鎖的解釋:當(dāng)某一個(gè)線程調(diào)用‘lock.test_and_set’時(shí),即設(shè)置lock的狀態(tài)為true,當(dāng)另一個(gè)線程進(jìn)入時(shí),再次調(diào)用test_and_set時(shí)返回的狀態(tài)為true,則一直在while循環(huán)中不斷獲取,即實(shí)現(xiàn)了等待,直到第一個(gè)線程調(diào)用clear將狀態(tài)變?yōu)閒alse。

      std::atomic:通過atomic模板類可以對(duì)更多的類型進(jìn)行原子操作

      (1)is_lock_free:通過這個(gè)接口判斷是否需要加鎖。如果是,則在多個(gè)線程訪問該對(duì)象時(shí)不會(huì)導(dǎo)致線程阻塞(可能使用某種事務(wù)內(nèi)存transactional memory方法實(shí)現(xiàn)lock-free的特性)。事實(shí)上該函數(shù)可以做為一個(gè)靜態(tài)函數(shù)。所有指定相同類型T的atomic實(shí)例的is_lock_free函數(shù)都會(huì)返回相同值。

      (2)store:賦值操作。operator=實(shí)際上內(nèi)部調(diào)用了store,并返回d。

      void store(T desr, memory_order m = memory_order_seq_cst) noexcept;void store(T desr, memory_order m = memory_order_seq_cst) volatile noexcept;T operator=(T d) noexcept;T operator=(T d) volatile noexcept;

      (3)load: 讀取,加載并返回變量的值。operator T是load的簡(jiǎn)化版,內(nèi)部調(diào)用的是load(memory_order_seq_cst)形式。

      (4)exchange:交換,賦值后返回變量賦值前的值。exchange也稱為read-modify-write操作。

      T exchange(T desr, memory_order m = memory_order_seq_cst) volatile noexcept;

      T exchange(T desr, memory_order m = memory_order_seq_cst) noexcept;

      (5)compare_exchange_weak:這就是有名的CAS(Compare And Swap: 比較并交換)。操作是原子的,排它的。其它線程如果想要讀取或修改該原子對(duì)象時(shí),會(huì)等待先該操作完成。

      (6)compare_exchange_strong:

      進(jìn)行compare時(shí),與weak版一樣,都是比較的物理內(nèi)容。與weak版不同的是,strong版本不會(huì)返回偽false。即:原子對(duì)象所封裝的值如果與expect在物理內(nèi)容上相同,strong版本一定會(huì)返回true。其所付出的代價(jià)是:在某些需要循環(huán)檢測(cè)的算法,或某些平臺(tái)下,其性能較compare_exchange_weak要差。但對(duì)于某些不需要采用循環(huán)檢測(cè)的算法而言, 通常采用compare_exchange_strong 更好。

      std::atomic特化

      (1)fetch_add:該函數(shù)將原子對(duì)象封裝的值加上v,同時(shí)返回原子對(duì)象的舊值。其功能用偽代碼表示為:

      // T is integral

      T fetch_add(T v, memory_order m = memory_order_seq_cst) volatile noexcept;

      T fetch_add(T v, memory_order m = memory_order_seq_cst) noexcept;

      // T is pointer

      T fetch_add(ptrdiff_t v, memory_order m = memory_order_seq_cst) volatile noexcept;

      T fetch_add(ptrdiff_t v, memory_order m = memory_order_seq_cst) noexcept;

      (2)fetch_sub:該函數(shù)將原子對(duì)象封裝的值減去v,同時(shí)返回原子對(duì)象的舊值。其功能用偽代碼表示為:

      // T is integral

      T fetch_sub(T v, memory_order m = memory_order_seq_cst) volatile noexcept;

      T fetch_sub(T v, memory_order m = memory_order_seq_cst) noexcept;

      // T is pointer

      T fetch_sub(ptrdiff_t v, memory_order m = memory_order_seq_cst) volatile noexcept;

      T fetch_sub(ptrdiff_t v, memory_order m = memory_order_seq_cst) noexcept;

      (3)++, –, +=, -=:不管是基于整數(shù)的特化,還是指針特化,atomic均支持這四種操作。其用法與未封裝時(shí)一樣

      獨(dú)屬于數(shù)值型特化的原子操作 – 位操作:

      (1)fetch_and,fetch_or,fetch_xor:

      位操作,將contained按指定方式進(jìn)行位操作,并返回contained的舊值。

      integral fetch_and(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;

      integral fetch_and(integral v, memory_order m = memory_order_seq_cst) noexcept;

      integral fetch_or(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;

      integral fetch_or(integral v, memory_order m = memory_order_seq_cst) noexcept;

      integral fetch_xor(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;

      integral fetch_xor(integral v, memory_order m = memory_order_seq_cst) noexcept;

      (2)perator &=,operator |=,operator ^=:與相應(yīng)的fetch_*操作不同的是,operator操作返回的是新值

      T operator &=(T v) volatile noexcept {return fetch_and(v) & v;}

      T operator &=(T v) noexcept {return fetch_and(v) & v;}

      T operator |=(T v) volatile noexcept {return fetch_or(v) | v;}

      T operator |=(T v) noexcept {return fetch_or(v) | v;}

      T operator ^=(T v) volatile noexcept {return fetch_xor(v) ^ v;}

      T operator ^=(T v) noexcept {return fetch_xor(v) ^ v;}

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月30日 20:05
      下一篇 2022年6月30日 20:05

      相關(guān)推薦

      • 存儲(chǔ)過程語(yǔ)法(sql server存儲(chǔ)過程語(yǔ)法)

        今天小編給各位分享存儲(chǔ)過程語(yǔ)法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過程語(yǔ)法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲(chǔ)過程基本語(yǔ)法…

        2022年11月26日
      • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

        直播帶貨無論是對(duì)于商家來說還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

        2022年11月24日
      • cpu性能天梯圖2022 AMD CPU天梯圖最新排行榜出爐

        用戶在DIY自己的主機(jī)時(shí)選擇CPU是非常關(guān)鍵的,CPU可以說是電腦的大腦,大家也都想追求好一點(diǎn)的CPU來使用,但型號(hào)太多了,大部分的用戶都不知道目前哪一款CPU比較好用,快來看看詳…

        2022年11月24日
      • 快手限流多久能解除(快手限流什么意思)

        我相信很多人都看中了快手平臺(tái)的商機(jī),都爭(zhēng)先恐后地想要搶占機(jī)會(huì),可一些人剛剛作出一點(diǎn)成績(jī),就被降權(quán)了,自己也不知道什么原因。所以今天就來聊聊快手賬號(hào)降權(quán)操作分享,趕快來看看避免違規(guī)!…

        2022年11月23日
      • QQ發(fā)布6.8.8.6517測(cè)試版 新增GIF表情Tab

        騰訊 QQ 現(xiàn)已面向 macOS 用戶發(fā)布了 6.8.8.6517 測(cè)試版更新,帶來了新功能、體驗(yàn)優(yōu)化和 Bug 修復(fù)。 新功能方面,測(cè)試版中,QQ 支持記憶消息輸入?yún)^(qū)大小和群成員…

        2022年11月22日
      • Win11 22H2再出新問題Bug:無法彈出USB設(shè)備

        作為Windows 11的首次大更新,在Win11 22H2發(fā)布后并沒有帶來預(yù)想的場(chǎng)景,各種問題頻現(xiàn)成為了一種常態(tài)。 近日有消息稱,Win11 22H2存在一個(gè)占用沖突Bug,當(dāng)用…

        2022年11月22日
      • 美團(tuán)月付300小額取現(xiàn)?美團(tuán)月付取現(xiàn)300不見了

        很多上班族每天都在使用美團(tuán)點(diǎn)外賣,你知道美團(tuán)現(xiàn)在推出了一款類似花唄的產(chǎn)品嗎?可以在美團(tuán)消費(fèi)的時(shí)候先消費(fèi)后還款,叫做美團(tuán)月付,是美團(tuán)推出的一款消費(fèi)型產(chǎn)品,不能直接提現(xiàn)到銀行卡,只能用…

        2022年11月21日
      • AMD下一代線程撕裂者現(xiàn)身 最高96核192線程480MB緩存

        此前的消息表明,明年AMD就將發(fā)布下一代基于Zen 4架構(gòu)的全新Ryzen Threadripper 7000“Storm Peak”處理器。現(xiàn)在,疑似其頂級(jí)型號(hào)(可能被稱作Pro…

        2022年11月18日
      • 丁俊暉2022斯諾克英錦賽直播觀看平臺(tái) 丁俊暉vs奧沙利文視頻直播入口CCTV5

        北京時(shí)間11月17日深夜,2022年斯諾克英國(guó)錦標(biāo)賽1/8決賽中國(guó)球手丁俊暉狀態(tài)極佳,以6比1橫掃威爾士選手杰米·克拉克闖入8強(qiáng)。1/4決賽,丁俊暉將迎戰(zhàn)已經(jīng)晉級(jí)的奧沙利文。 在這…

        2022年11月18日
      • 京東店鋪類型有哪些京東入駐有什么資質(zhì)要求

        今天的互聯(lián)網(wǎng)發(fā)展迅速,讓傳統(tǒng)企業(yè)有了更多選擇,但也同樣也對(duì)剛觸網(wǎng)的商家增添了許多迷茫,近日知舟電商就收到很多商家朋友詢問京東入駐相關(guān)問題,今天知舟君就給大家分享下。 一.京東入駐準(zhǔn)…

        2022年11月18日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息