釋放序列和同步

#include <iostream>
#include<thread>
#include<atomic>
#include<vector>
std::atomic<int>count(0);
std::vector<int>queue_data;
//如果存儲操作被標記為memory_order_release、memory_order_acq_rel或memory_order_seq_cst,
// 加載操作被標記為memory_order_consume、memory_order_acquire或memory_order_seq_cst,
// 并且鏈中的每個操作都加載了前一個操作寫入的值,那么這一連串的操作構成了一個釋放序列。
// 鏈中的任何原子讀 - 修改 - 寫操作都可以有任何內存排序(甚至是memory_order_relaxed)//填充隊列
void populate_queue_items() {unsigned const number_of_items = 100;queue_data.clear(); //每次填充隊列時清空一下for (int i = 0; i < number_of_items; ++i) {queue_data.push_back(i);}count.store(number_of_items, std::memory_order_release); //使用release模式填充原子變量
}
void process_queue_items(const int& item_index) {std::cout << "獲得數據:" << queue_data.at(item_index - 1) << "\n";std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
//消費數據
void consume_queue_items() {while (true) {int item_index;//使用acquire和上面的release同步,并且自身+1,這是一個釋放操作、獲取操作//count減到0為止,然后重新開始獲得數據if ((item_index = count.fetch_sub(1, std::memory_order_acq_rel)) <= 0) { //多次釋放、獲取形成了一條釋放獲取鏈std::cout << "等待數據準備中……\n";std::this_thread::sleep_for(std::chrono::microseconds(1));std::thread t(populate_queue_items);t.detach();continue;}process_queue_items(item_index); //使用數據}
}
void Test() {std::thread t(consume_queue_items);t.join();
}
int main(){Test();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44425.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FP5207+音頻功率放大器的組合解決方案-適用于便攜式音頻播放器、無線耳機、智能音箱和車載音響系統等高質量音頻輸出需求的產品,以提高電池供電的效率和輸出功率

隨著消費者對智能家居的需求增長&#xff0c;智能音響市場成為重要增長點。同時&#xff0c;音響技術也在不斷發展&#xff0c;音響及揚聲器的功能和性能不斷提升。 藍牙音箱&#xff0c;這類音箱供電是以鋰電池為主&#xff0c;一般選用內置升壓的音頻功放芯片&#xff0c;音響…

iOS input 標簽 focus 失效

解決方案 <inputv-if"show"ref"inputRef" />watch(inputRef, (ref) > {ref?.focus(); });

vivado DQS_BIAS

DQS_偏差 DQS_BIAS是驅動差分輸入緩沖器的頂級端口的屬性&#xff0c;或者 雙向緩沖基元&#xff08;IBUFDS、IOBUFDS&#xff09;。 DQS_BIAS屬性在某些的輸入端提供可選的DC偏置 偽差分I/O標準&#xff08;DIFF_SSTL&#xff09;和真差分I/O規范&#xff08;LVDS&#xff09;…

windows 構建nginx本地服務隨系統自啟

1.先去官網下載一個nginxzip 2.將zip解壓&#xff0c;將nginx-server.exe文件放入文件夾 3.創建nginx-server.xml&#xff0c;將以下內容放進文件內 <service> <id>nginx</id> <name>Nginx Service</name> <description>High Per…

強化學習中的蒙特卡洛算法和時序差分算法

在強化學習&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;價值函數的估計是核心任務之一。蒙特卡洛&#xff08;Monte Carlo, MC&#xff09;方法和時序差分&#xff08;Temporal Difference, TD&#xff09;方法是兩種常用的策略&#xff0c;用于估計狀態…

軟件架構之架構風格

軟件架構之架構風格 9.3 軟件架構風格9.3.1 軟件架構風格分類9.3.2 數據流風格9.3.3 調用/返回風格9.3.4 獨立構件風格9.3.5 虛擬機風格9.3.6 倉庫風格 9.4 層次系統架構風格9.4.1 二層及三層 C/S 架構風格9.4.2 B/S 架構風格9.4.3 MVC 架構風格9.4.4 MVP 架構風格 9.5 面向服務…

機器學習筑基篇,?Ubuntu 24.04 編譯安裝 Python 及多版本切換

[ 知識是人生的燈塔&#xff0c;只有不斷學習&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 編譯安裝最新Python及多版本切換 描述&#xff1a;說到機器學習&#xff0c;人工智能&#xff0c;深度學習不免會提到Python這一門編程語言&#xff08;人生苦短&#xff0c;及時Pyt…

windows防火墻端口設置

PS&#xff1a;本文實例為Windows Server 2019&#xff0c;其他Windows版本大同小異。 1、首先打開windows防火墻&#xff0c;點擊“高級設置” 2、 高級設置界面 3、假設需要開放一個端口為3306應該怎么做 光標對準“入站規則”右鍵新建規則&#xff0c;選擇“端口” 協議這…

C++類和對象(一)

目錄 面向過程和面向對象 面向過程編程&#xff08;Procedural Programming&#xff09; 面向對象編程&#xff08;Object-Oriented Programming&#xff09; 一、類的定義 類定義格式 類域 二、類的訪問限定符及封裝 訪問限定符 封裝 三、實例化 實例化概念 對象大小…

軟件運行次數

題目&#xff1a; 實現一個驗證程序運行次數的小程序&#xff0c;要求如下&#xff1a; 當程序運行超過3次時給出提示&#xff1a;本軟件只能免費使用3次&#xff0c;歡迎您注冊會員后繼續使用&#xff5e;程序運行演示如下&#xff1a; 第一次運行控制臺輸出&#xff1a;歡迎…

常見WAF攔截頁面總結

(1) D盾 (2) 云鎖 (3) UPUPW安全防護 (4) 寶塔網站防火墻 (5) 網防G01 (6) 護衛神 (7) 網站安全狗 (8) 智創防火墻 (9) 360主機衛士或360webscan (10) 西數WTS-WAF (11) Naxsi WAF (12) 騰訊云 (13) 騰訊宙斯盾 (14) 百度云 圖片 (15) 華為云 (16) 網宿云 (17) 創宇盾 圖片 (…

ROS服務通信自定義srv

服務通信自定義srv 流程:創建ROS功能包按照固定格式創建srv文件編譯配置文件編譯生成中間文件 流程: srv 文件內的可用數據類型與 msg 文件一致&#xff0c;且定義 srv 實現流程與自定義 msg 實現流程類似&#xff0c;需查閱msg文件的可以瀏覽ROS話題通信流程自定義數據msg格式…

【服務器】在Linux查看運行的Python程序,并找到特定的Python程序

在Linux查看運行的Python程序并找到特定的Python程序 寫在最前面1. 使用ps命令查看所有Python進程查看詳細信息 2. 使用pgrep命令查找Python進程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python進程打開的文件 5. 使用nvidia-smi命令查看GPU使用情況…

JDBC編程的學習——MYsql版本

目錄 前言 什么是JDBC ??? 前置準備 使用JDBC的五個關鍵步驟 1.建立與數據庫的連接 2.創建具體的sql語句和Statement 3.執行SQL語句 4.處理結果集 5.釋放資源 完整流程展示 前言 筆者在先前的博客就提過會寫關于JDBC的內容 [Mysql] 的基礎知識和sql 語句.教你速成…

R包:reticulate R對python的接口包

介紹1 R和python是兩種不同的編程語言&#xff0c;前者是統計學家發明并且服務數學統計計算&#xff0c;后者則是最萬能的膠水語言。隨著大數據時代的到來&#xff0c;兩者在數據分析領域存在越來越多的共同點且可以相互使用&#xff0c;為了破解二者的編程壁壘&#xff0c;CR…

軟考《信息系統運行管理員》-3.1信息系統設施運維的管理體系

3.1信息系統設施運維的管理體系 1 信息系統設施運維的對象 基礎環境 主要包括信息系統運行環境(機房、設備間、配線室、基站、云計算中心 等)中的空調系統、供配電系統、通信應急設備系統、防護設備系統(如消防系統、安全系統) 等&#xff0c;能維持系統安全正常運轉&#xf…

【第26章】MyBatis-Plus之高級特性

文章目錄 前言一、數據審計&#xff08;對賬&#xff09;二、數據敏感詞過濾三、數據范圍&#xff08;數據權限&#xff09;四、表結構自動維護五、字段數據綁定&#xff08;字典回寫&#xff09;六、虛擬屬性綁定七、字段加密解密八、字段脫敏九、多數據源分庫分表&#xff08…

從零開始學習嵌入式----Linux系統命令集合與shell腳本

Shell是一門編程語言&#xff0c;作為學習shell的開始&#xff0c;需要事先搞明白&#xff1a;編程的目的是什么&#xff1f;什么是編程語言&#xff1f;什么是編程&#xff1f; shell本身就是一門解釋型、弱類型、動態語言&#xff0c;與python相對應&#xff0c;Python屬于解…

aardio —— 今日減bug

打字就減bug 鼠標雙擊也減bug 看看有多少bug夠你減的 使用方法&#xff1a; 1、將資源附件解壓縮&#xff0c;里面的文件夾&#xff0c;放到aardio\plugin\plugins 目錄 2、aardio 啟動插件 → 插件設置 → 選中“今日減bug” → 保存。 3、重啟 aardio&#xff0c;等aa…

旗晟智能巡檢機器人:開啟工業運維的智能化新篇章

在當今快速發展的工業領域&#xff0c;安全、效率和成本控制是企業運營的核心。旗晟科技以創新為驅動&#xff0c;推出了一站式的工業級智能巡檢機器人數字化全景運維解決方案&#xff0c;為石油、天然氣、化工、電力等高危行業提供了一個全新的運維模式。 一、面對挑戰&#x…