精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++20新特性的小細節(jié),你掌握了嗎?

開發(fā) 后端
這個可能大多數(shù)人都有所了解,這就是我們經(jīng)常會用到的CountDownLatch。用于使一個線程先阻塞,等待其他線程完成各自的工作后再繼續(xù)執(zhí)行。

[[428229]]

本文轉(zhuǎn)載自微信公眾號「程序喵大人」,作者程序喵大人。轉(zhuǎn)載本文請聯(lián)系程序喵大人公眾號。

之前我整理過一篇C++20新特性的文章全網(wǎng)首發(fā)!!C++20新特性全在這一張圖里了,里面提到過latch、barrier和semaphore,但是沒有詳細介紹過三者的作用和區(qū)別,這里詳細介紹下。

latch

這個可能大多數(shù)人都有所了解,這就是我們經(jīng)常會用到的CountDownLatch。用于使一個線程先阻塞,等待其他線程完成各自的工作后再繼續(xù)執(zhí)行。

CountDownLatch是通過計數(shù)器實現(xiàn),計數(shù)器的初始值為線程的數(shù)量。每當(dāng)一個線程完成了自己的任務(wù)后,計數(shù)器的值就會減1。當(dāng)計數(shù)器值到達0時,它表示所有的線程已經(jīng)完成了任務(wù),然后等待的線程就可以打斷阻塞去繼續(xù)執(zhí)行任務(wù)。

自己之前實現(xiàn)過一個CountDownLatch,源碼大概這樣:

  1. CountDownLatch::CountDownLatch(int32_t count) : count_(count) {} 
  2.  
  3. void CountDownLatch::CountDown() { 
  4.     std::unique_lock<std::mutex> lock(mutex_); 
  5.     --count_; 
  6.     if (count_ == 0) { 
  7.         cv_.notify_all(); 
  8.     } 
  9.  
  10. void CountDownLatch::Await(int32_t time_ms) { 
  11.     std::unique_lock<std::mutex> lock(mutex_); 
  12.     while (count_ > 0) { 
  13.         if (time_ms > 0) { 
  14.             cv_.wait_for(lock, std::chrono::milliseconds(time_ms)); 
  15.         } else { 
  16.             cv_.wait(lock); 
  17.         } 
  18.     } 
  19.  
  20. int32_t CountDownLatch::GetCount() const { 
  21.     std::unique_lock<std::mutex> lock(mutex_); 
  22.     return count_; 

barrier

許多線程在阻塞點阻塞,當(dāng)?shù)竭_阻塞點的線程達到一定數(shù)量時,會執(zhí)行完成的回調(diào),然后解除所有相關(guān)線程的阻塞,然后重置線程計數(shù)器,繼續(xù)開始下一階段的阻塞。

假設(shè)有很多線程并發(fā)執(zhí)行,并在一個循環(huán)中執(zhí)行一些計算。進一步假設(shè)一旦這些計算完成,需要在線程開始其循環(huán)的新迭代之前對結(jié)果進行一些處理。

看以下示例代碼(摘自cppreference):

  1. #include <barrier> 
  2. #include <iostream> 
  3. #include <string> 
  4. #include <thread> 
  5. #include <vector> 
  6.   
  7. int main() { 
  8.   const auto workers = { "anil""busara""carl" }; 
  9.   
  10.   auto on_completion = []() noexcept {  
  11.     // locking not needed here 
  12.     static auto phase = "... done\n" "Cleaning up...\n"
  13.     std::cout << phase; 
  14.     phase = "... done\n"
  15.   }; 
  16.   std::barrier sync_point(std::ssize(workers), on_completion); 
  17.   
  18.   auto work = [&](std::string name) { 
  19.     std::string product = "  " + name + " worked\n"
  20.     std::cout << product;  // ok, op<< call is atomic 
  21.     sync_point.arrive_and_wait(); 
  22.   
  23.     product = "  " + name + " cleaned\n"
  24.     std::cout << product; 
  25.     sync_point.arrive_and_wait(); 
  26.   }; 
  27.   
  28.   std::cout << "Starting...\n"
  29.   std::vector<std::thread> threads; 
  30.   for (auto const& worker : workers) { 
  31.     threads.emplace_back(work, worker); 
  32.   } 
  33.   for (auto& thread : threads) { 
  34.     thread.join(); 
  35.   } 

可能的輸出如下:

  1. Starting... 
  2.   anil worked 
  3.   carl worked 
  4.   busara worked 
  5. ... done 
  6. Cleaning up... 
  7.   busara cleaned 
  8.   carl cleaned 
  9.   anil cleaned 
  10. ... done 

semaphore

信號量,這個估計大家都很熟悉,本質(zhì)也是個計數(shù)器,主要有兩個方法:

acquire():遞減計數(shù)器,當(dāng)計數(shù)器為零時阻塞,直到計數(shù)器再次遞增。

release():遞增計數(shù)器(可傳遞具體數(shù)字),并解除在acquire調(diào)用中的線程的阻塞。

示例代碼如下:

  1. #include <iostream> 
  2. #include <thread> 
  3. #include <chrono> 
  4. #include <semaphore> 
  5.  
  6. std::binary_semaphore 
  7.   smphSignalMainToThread(0), 
  8.   smphSignalThreadToMain(0); 
  9.   
  10. void ThreadProc() {   
  11.   smphSignalMainToThread.acquire(); 
  12.   std::cout << "[thread] Got the signal\n"; // response message 
  13.   using namespace std::literals; 
  14.   std::this_thread::sleep_for(3s); 
  15.   
  16.   std::cout << "[thread] Send the signal\n"; // message 
  17.   smphSignalThreadToMain.release(); 
  18.   
  19. int main() { 
  20.   std::thread thrWorker(ThreadProc); 
  21.   std::cout << "[main] Send the signal\n"; // message 
  22.   
  23.   smphSignalMainToThread.release(); 
  24.   
  25.   smphSignalThreadToMain.acquire(); 
  26.   
  27.   std::cout << "[main] Got the signal\n"; // response message 
  28.   thrWorker.join(); 
  29. 輸出如下: 
  30. [main] Send the signal 
  31. [thread] Got the signal 
  32. [thread] Send the signal 
  33. [main] Got the signal 

信號量也可以當(dāng)作條件變量使用,這個我估計大家應(yīng)該知道怎么做。

 

打完收工。

 

責(zé)任編輯:武曉燕 來源: 程序喵大人
相關(guān)推薦

2024-01-19 21:07:22

C++20Concepts函數(shù)

2024-12-18 11:30:00

C++20比較運算符

2025-06-26 02:00:00

2020-01-10 15:44:50

編程語言C++Java

2020-10-14 07:52:36

ES11編程語言開發(fā)

2024-02-05 22:13:50

C++C++20開發(fā)

2023-11-04 20:00:02

C++20協(xié)程

2010-08-04 15:01:00

2024-12-05 08:13:18

2024-08-13 08:30:13

2014-02-17 10:54:13

PostgreSQL數(shù)據(jù)庫

2020-12-21 21:05:29

C++C++20標(biāo)準(zhǔn)草案

2023-11-15 15:54:17

C++運算符

2021-03-05 18:38:45

ESvue項目

2020-02-03 13:55:49

技術(shù)研發(fā)指標(biāo)

2024-10-21 07:05:14

C#特性語言

2024-05-17 08:42:52

AttributeMyClass方法

2023-08-08 08:08:42

PythonWeb開發(fā)

2023-11-20 22:19:10

C++static

2024-03-20 08:31:40

KotlinExtension計算
點贊
收藏

51CTO技術(shù)棧公眾號

精品爽片免费看久久| 亚洲在线视频网站| 国产久一一精品| 欧美三级免费看| 香蕉视频一区二区三区| 欧美性色欧美a在线播放| 警花观音坐莲激情销魂小说| 深夜福利视频在线免费观看| 蜜桃视频在线观看一区二区| 超碰91人人草人人干| 极品人妻一区二区三区| 国产69精品久久久久9999人| 一级中文字幕一区二区| 日韩欧美第二区在线观看| www.av导航| 蜜臀国产一区二区三区在线播放| 久久久久久久激情视频| 三级黄色片在线观看| 久久影院资源站| 日韩一区二区麻豆国产| 青青青国产在线视频| 懂色av一区| 国产精品国产三级国产aⅴ无密码| 国产日韩精品推荐| 国产乱码久久久| 日日摸夜夜添夜夜添亚洲女人| 欧美另类高清videos| 怡红院一区二区三区| 久久久久久毛片免费看| 欧美一卡在线观看| 欧美婷婷精品激情| 欧美极品免费| 天天亚洲美女在线视频| 国产成人亚洲综合无码| 欧美成年黄网站色视频| 久久精品免视看| 久久久水蜜桃| 天天操天天干天天插| 国产成人午夜电影网| 国产精品啪视频| 一级特黄免费视频| 性色一区二区三区| 777777777亚洲妇女| 国产性70yerg老太| 欧美视频不卡| 欧美人在线视频| 麻豆精品一区二区三区视频| 手机在线一区二区三区| 国产一区二区激情| 蜜臀久久99精品久久久久久| 天堂99x99es久久精品免费| 欧美精品一区二| 丰满人妻一区二区三区免费视频棣| 精品国产第一国产综合精品| 91 com成人网| 色噜噜狠狠一区二区三区狼国成人| 成人在线视频观看| 欧美日韩精品一区二区天天拍小说 | 亚洲天堂中文在线| 日本欧美在线观看| 国产在线视频91| 99热这里精品| 国产成人精品免费一区二区| 91九色露脸| 熟妇人妻av无码一区二区三区| 99久久久精品免费观看国产蜜| 久久爱av电影| 成人在线免费看| 国产精品久久久久四虎| 亚洲欧美日韩不卡| 蜜桃传媒在线观看免费进入| 五月综合激情日本mⅴ| 欧美 日韩 国产在线观看| 在线天堂资源www在线污| 色综合咪咪久久| 99热一区二区| www.豆豆成人网.com| 日韩黄在线观看| 黄色裸体一级片| 欧美日韩理论| 国产精品 欧美在线| 一区二区精品视频在线观看| 国产精品中文字幕日韩精品| 国模一区二区三区私拍视频| 国产精品麻豆一区二区三区| 亚洲人成精品久久久久| 成人性免费视频| ww久久综合久中文字幕| 制服丝袜在线91| 中文字幕在线播放一区| 国产精品一线天粉嫩av| 久久偷看各类女兵18女厕嘘嘘| 国产亚洲精品久久久久久无几年桃| 模特精品在线| 91大片在线观看| 你懂的免费在线观看| 亚洲欧美色综合| 亚洲人成无码www久久久| 国产精品一区三区在线观看| 日韩精品免费在线| 26uuu成人网| 噜噜噜91成人网| 亚洲综合小说区| 高清福利在线观看| 香蕉成人啪国产精品视频综合网 | 欧美影视资讯| 日韩欧美国产成人一区二区| 国产精品av久久久久久无| 欧美视频四区| 国产三级精品网站| 深夜福利免费在线观看| 亚洲精品日韩一| 成人亚洲视频在线观看| 成人在线超碰| 久久成人在线视频| 中文字幕永久在线观看| 91天堂素人约啪| 久艹在线免费观看| 四虎地址8848精品| 国产一区二区三区欧美| 特一级黄色大片| 国产成人综合精品三级| 亚洲一区3d动漫同人无遮挡 | 免费看精品久久片| 久久青青草综合| gogo久久| 日韩精品一区二区三区在线观看| 免费黄色国产视频| 欧美aaaaa成人免费观看视频| 久久福利电影| av剧情在线观看| 精品美女一区二区| 日本黄色小说视频| 国内精品国产成人| 男插女免费视频| 欧洲亚洲精品| 在线观看欧美日韩国产| 波多野结衣绝顶大高潮| 久久久综合精品| 欧美日韩在线中文| 五月国产精品| 久久久久久69| 国产乱淫av片免费| 亚洲乱码日产精品bd| 老司机久久精品| 国产精品福利在线观看播放| 国产精品久久97| 中文字幕在线观看日本| 欧美三级视频在线播放| 国产成人无码精品久久二区三| 国产精品久久久免费| 精品综合久久| 怡红院成人在线| 国产一区二区三区在线观看视频| 欧美日韩在线视频播放| 国产精品激情偷乱一区二区∴| 国内外成人免费在线视频| 国产精品精品国产一区二区| 91色精品视频在线| 美女航空一级毛片在线播放| 精品国产成人在线影院| 日韩三级av在线| 久久久久亚洲综合| 九九热免费在线观看| 亚洲女同中文字幕| 国产精品视频入口| 亚洲播播91| 久久精品成人动漫| 成人午夜精品福利免费| 五月婷婷激情综合| xxxxx在线观看| 狠狠色2019综合网| 日本丰满少妇xxxx| 狠狠做深爱婷婷综合一区| 国产久一一精品| av在线免费观看网址| 精品国产成人系列| 最近国语视频在线观看免费播放| 亚洲欧洲成人av每日更新| 波多野结衣三级视频| 久久福利一区| 国产精品无码乱伦| xxxx日韩| 国产精品美乳在线观看| 午夜伦理大片视频在线观看| 日韩成人黄色av| 在线观看一二三区| 亚洲第一狼人社区| 农村老熟妇乱子伦视频| 高清在线成人网| 日韩有码免费视频| 欧美1区2区3区| 欧美久久久久久一卡四| gogo大尺度成人免费视频| 91国产美女视频| 国产调教视频在线观看| 日韩电影免费观看中文字幕| 国产精品九九九九| 一本一道久久a久久精品| 色欲人妻综合网| 91亚洲永久精品| 天天操精品视频| 久久午夜影视| 国产精品久久久久久久乖乖| 欧州一区二区| 精品综合在线| 日韩在线成人| 成人做爽爽免费视频| 亚洲欧洲自拍| 欧美激情高清视频| 毛片在线播放a| 亚洲欧美制服综合另类| 亚洲精品一区二区三区四区| 欧美日韩午夜在线| 区一区二在线观看| 亚洲第一久久影院| 欧美片一区二区| 自拍偷拍国产亚洲| 国产视频123区| 久久一留热品黄| www.啪啪.com| 国产a级毛片一区| 在线免费看v片| 久久国产剧场电影| 狠狠热免费视频| 麻豆久久精品| 欧美黄色一级片视频| 一区二区91| 久久国产精品网| 欧美日韩1区2区3区| 中文字幕欧美日韩一区二区三区 | 成人av在线电影| 初高中福利视频网站| 极品销魂美女一区二区三区| 久久精品影视大全| 日韩电影在线一区| 国产精品天天av精麻传媒| 美女黄色成人网| 欧美私人情侣网站| 天堂一区二区在线免费观看| 99蜜桃臀久久久欧美精品网站| 国产欧美一区二区色老头 | 国产成人午夜精品5599 | 亚洲网址在线观看| 97se视频在线观看| 天堂va欧美ⅴa亚洲va一国产| 亚洲aa中文字幕| 亚洲午夜免费| 精品久久久久久一区| 欧美福利在线播放网址导航| 久久国产主播精品| 国产午夜一区| 亚洲美女网站18| 五月天综合网站| 青青视频免费在线| 亚洲欧洲另类| av免费在线播放网站| 日韩在线一区二区| 亚洲一区二区在线视频观看| 国产在线麻豆精品观看| 人妻互换一二三区激情视频| 成人性视频免费网站| 最近中文字幕无免费| 久久精品夜色噜噜亚洲a∨| 国产精成人品免费观看| **性色生活片久久毛片| 免费人成年激情视频在线观看| 性欧美大战久久久久久久久| 91久久国产综合久久91| 欧美日韩高清一区| 亚洲春色一区二区三区| 日韩电影中文字幕一区| 1769视频在线播放免费观看| 欧美xxxx做受欧美.88| 免费成人在线电影| 国产精品自拍偷拍| 极品一区美女高清| 日韩欧美视频一区二区三区四区| 欧美r级电影| 人人妻人人做人人爽| 久久亚洲国产精品一区二区| 亚洲娇小娇小娇小| 不卡在线观看av| 日韩欧美黄色网址| 亚洲韩国一区二区三区| 国产主播第一页| 日韩美女主播在线视频一区二区三区| 农村少妇久久久久久久| 在线亚洲午夜片av大片| 手机电影在线观看| 国产精品第一区| 国产精品x8x8一区二区| 亚洲bbw性色大片| 亚洲精华国产欧美| 亚洲欧美国产中文| 91美女在线视频| 青青操视频在线播放| 欧洲视频一区二区| 天天综合天天色| 日韩在线播放一区| 伊人网在线播放| 4444kk亚洲人成电影在线| 国产精品嫩草影院在线看| 妺妺窝人体色www看人体| 久久午夜精品| 7788色淫网站小说| 亚洲精品免费在线播放| 少妇无套内谢久久久久| 亚洲黄页网在线观看| 成人影欧美片| 国产精品视频一区二区三区四| 精品亚洲精品| 精品嫩模一区二区三区| 久久国产生活片100| 成人精品999| 精品久久香蕉国产线看观看gif| 国产精品一区二区av白丝下载 | 男人的天堂在线视频免费观看| 5566成人精品视频免费| 中文字幕一区二区三区四区久久 | 麻豆影视国产在线观看| 国产999精品视频| 人体久久天天| 男人添女荫道口图片| 国产精品乡下勾搭老头1| 免费黄色国产视频| 欧美日韩免费在线视频| 国产视频精选在线| 热99精品里视频精品| 色天下一区二区三区| 国产日本在线播放| 成人免费黄色在线| 国产无套粉嫩白浆内谢| 日韩欧美一区二区在线视频| 欧美激情午夜| 91精品久久久久| 91tv官网精品成人亚洲| 黄色小视频免费网站| 自拍偷拍亚洲欧美日韩| 97精品人妻一区二区三区香蕉 | 永久看片925tv| 91精品国产综合久久久蜜臀粉嫩 | 天天做天天爱天天综合网2021| 亚洲视频在线a| 国产精品人妖ts系列视频| 久久精品国产亚洲av麻豆蜜芽| 国产一区二区三区高清在线观看| 婷婷激情一区| 视频一区二区三区在线观看| 美女网站在线免费欧美精品| 三级黄色免费观看| 91精品国产色综合久久ai换脸| a毛片在线观看| av观看久久| 一本色道88久久加勒比精品| 国产伦精品一区二区三区妓女| 色综合 综合色| 9i精品一二三区| 91在线中文字幕| 黄页网站一区| 搡老熟女老女人一区二区| 色婷婷久久久久swag精品| 成黄免费在线| 91夜夜揉人人捏人人添红杏| 国产精品v一区二区三区| 99久久久无码国产精品性波多| 精品久久久久久亚洲国产300| 九色在线播放| 成人免费福利视频| 激情婷婷亚洲| 91精彩刺激对白露脸偷拍| 欧美伊人久久久久久午夜久久久久| 激情成人四房播| 国产一区二区不卡视频在线观看| 天堂一区二区在线免费观看| 欧美xxxooo| 亚洲风情亚aⅴ在线发布| 制服诱惑亚洲| 国产一区二区三区播放| 99精品久久久久久| 在线视频播放大全| 欧美激情一二区| 欧洲杯什么时候开赛| 精品人妻一区二区乱码| 欧美性xxxx极品hd欧美风情| 91精彩在线视频| 国产美女精品在线观看| 日本女人一区二区三区| 国产亚洲成人精品| 在线日韩av观看| 风间由美性色一区二区三区四区| 男女曰b免费视频| 亚洲伊人色欲综合网| av大片在线观看| 久久99影院| 国产iv一区二区三区| 亚洲中文一区二区三区| 国产91成人video| 欧美日韩国产色综合一二三四| 国产精品密蕾丝袜|