日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

C++多線程中的互斥鎖

來源: 責編: 時間:2024-06-24 09:11:39 216觀看
導讀在多線程編程中,互斥鎖(mutex)是確保線程安全、避免數據競爭的重要工具。C++標準庫提供了多種互斥鎖,每種都有其特定的應用場景和特點。主要有以下幾種互斥鎖(Mutex):std::mutex:最基本的互斥鎖,用于保護臨界區,確保同一時間只

在多線程編程中,互斥鎖(mutex)是確保線程安全、避免數據競爭的重要工具。C++標準庫提供了多種互斥鎖,每種都有其特定的應用場景和特點。yTe28資訊網——每日最新資訊28at.com

yTe28資訊網——每日最新資訊28at.com

主要有以下幾種互斥鎖(Mutex):yTe28資訊網——每日最新資訊28at.com

  • std::mutex:最基本的互斥鎖,用于保護臨界區,確保同一時間只有一個線程可以訪問被保護的資源。
  • std::timed_mutex:支持超時機制的互斥鎖,可以嘗試在給定時間內鎖定互斥鎖。如果在指定時間內沒有成功獲取鎖,則返回失敗。
  • std::recursive_mutex:遞歸互斥鎖,同一線程可以多次獲取鎖而不會發生死鎖,通常用于遞歸函數中。
  • std::recursive_timed_mutex:支持超時機制的遞歸互斥鎖,結合了遞歸鎖和超時鎖的特性。
  • std::shared_mutex(C++17 引入):允許多個線程同時讀取,但只有一個線程可以寫入。適用于讀多寫少的場景。
  • std::shared_timed_mutex(C++17 引入):支持超時機制的共享互斥鎖,可以在給定時間內嘗試獲取讀鎖或寫鎖。

這些是C++標準庫中提供的幾種主要的互斥鎖類型。每種鎖都有其特定的應用場景和使用方法,選擇合適的互斥鎖類型對于實現高效、安全的多線程程序非常重要。yTe28資訊網——每日最新資訊28at.com

一、基本互斥鎖(std::mutex)

std::mutex是最基本的互斥鎖,主要用于保護臨界區,確保同一時間只有一個線程可以訪問共享資源。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 簡單易用,適用于大多數場景。
  • 不能遞歸鎖定,同一線程多次嘗試鎖定會導致死鎖。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <mutex>std::mutex mtx;void print_thread_id(int id) {    std::lock_guard<std::mutex> lock(mtx); // 自動管理鎖的獲取和釋放    std::cout << "Thread ID: " << id << std::endl;}int main() {    std::thread t1(print_thread_id, 1);    std::thread t2(print_thread_id, 2);    t1.join();    t2.join();    return 0;}

yTe28資訊網——每日最新資訊28at.com

二、帶超時機制的互斥鎖(std::timed_mutex)

std::timed_mutex在std::mutex的基礎上增加了超時功能,允許線程在指定時間內嘗試獲取鎖,如果在超時時間內未成功獲取鎖,則返回失敗。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 適用于需要設置鎖獲取超時時間的場景。
  • 提供try_lock_for和try_lock_until兩種超時嘗試獲取鎖的方法。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <mutex>#include <chrono>std::timed_mutex tmtx;void try_to_lock(int id) {    if(tmtx.try_lock_for(std::chrono::milliseconds(100))) {        std::cout << "Thread " << id << " locked the mutex" << std::endl;        std::this_thread::sleep_for(std::chrono::milliseconds(200));        tmtx.unlock();    } else {        std::cout << "Thread " << id << " could not lock the mutex" << std::endl;    }}int main() {    std::thread t1(try_to_lock, 1);    std::thread t2(try_to_lock, 2);    t1.join();    t2.join();    return 0;}

yTe28資訊網——每日最新資訊28at.com

三、遞歸互斥鎖(std::recursive_mutex)

std::recursive_mutex允許同一線程多次獲取鎖而不會發生死鎖,這對于遞歸函數或需要多次鎖定的場景非常有用。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 適用于遞歸調用和需要多次鎖定的場景。
  • 需要注意避免濫用,因為遞歸鎖的使用會增加鎖定次數的復雜性。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <mutex>std::recursive_mutex rmtx;void recursive_function(int depth) {    rmtx.lock();    std::cout << "Depth: " << depth << std::endl;    if (depth > 0) {        recursive_function(depth - 1);    }    rmtx.unlock();}int main() {    std::thread t(recursive_function, 5);    t.join();    return 0;}

yTe28資訊網——每日最新資訊28at.com

四、帶超時機制的遞歸互斥鎖(std::recursive_timed_mutex)

std::recursive_timed_mutex結合了std::recursive_mutex和std::timed_mutex的特性,支持遞歸鎖定和超時機制。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 適用于遞歸調用和需要超時機制的場景。
  • 提供超時嘗試獲取遞歸鎖的方法。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <mutex>#include <chrono>std::recursive_timed_mutex rtmmtx;void try_recursive_lock(int id, int depth) {    if (rtmmtx.try_lock_for(std::chrono::milliseconds(100))) {        std::cout << "Thread " << id << " locked at depth " << depth << std::endl;        std::this_thread::sleep_for(std::chrono::milliseconds(50));        if (depth > 0) {            try_recursive_lock(id, depth - 1);        }        rtmmtx.unlock();    } else {        std::cout << "Thread " << id << " could not lock at depth " << depth << std::endl;    }}int main() {    std::thread t1(try_recursive_lock, 1, 3);    std::thread t2(try_recursive_lock, 2, 3);    t1.join();    t2.join();    return 0;}

yTe28資訊網——每日最新資訊28at.com

五、共享互斥鎖(std::shared_mutex)

std::shared_mutex允許多個線程同時讀取,但只有一個線程可以寫入。這在讀多寫少的場景下非常有用。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 適用于讀多寫少的場景。
  • 讀操作和寫操作使用不同的鎖定機制。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <shared_mutex>std::shared_mutex shmtx;void read_shared(int id) {    std::shared_lock<std::shared_mutex> lock(shmtx); // 共享鎖    std::cout << "Thread " << id << " is reading" << std::endl;    std::this_thread::sleep_for(std::chrono::milliseconds(100));}void write_shared(int id) {    std::unique_lock<std::shared_mutex> lock(shmtx); // 獨占鎖    std::cout << "Thread " << id << " is writing" << std::endl;    std::this_thread::sleep_for(std::chrono::milliseconds(100));}int main() {    std::thread readers[5], writer(write_shared, 1);    for (int i = 0; i < 5; ++i) {        readers[i] = std::thread(read_shared, i + 2);    }    writer.join();    for (auto& reader : readers) {        reader.join();    }    return 0;}

yTe28資訊網——每日最新資訊28at.com

六、帶超時機制的共享互斥鎖(std::shared_timed_mutex)

std::shared_timed_mutex結合了std::shared_mutex和std::timed_mutex的特性,支持超時機制。yTe28資訊網——每日最新資訊28at.com

特點:yTe28資訊網——每日最新資訊28at.com

  • 適用于讀多寫少且需要超時機制的場景。
  • 提供超時嘗試獲取共享鎖的方法。

示例代碼:yTe28資訊網——每日最新資訊28at.com

#include <iostream>#include <thread>#include <shared_mutex>#include <chrono>std::shared_timed_mutex shtmmtx;void try_read_shared(int id) {    if (shtmmtx.try_lock_shared_for(std::chrono::milliseconds(100))) {        std::cout << "Thread " << id << " is reading" << std::endl;        std::this_thread::sleep_for(std::chrono::milliseconds(50));        shtmmtx.unlock_shared();    } else {        std::cout << "Thread " << id << " could not read" << std::endl;    }}void try_write_shared(int id) {    if (shtmmtx.try_lock_for(std::chrono::milliseconds(100))) {        std::cout << "Thread " << id << " is writing" << std::endl;        std::this_thread::sleep_for(std::chrono::milliseconds(50));        shtmmtx.unlock();    } else {        std::cout << "Thread " << id << " could not write" << std::endl;    }}int main() {    std::thread readers[5], writer(try_write_shared, 1);    for (int i = 0; i < 5; ++i) {        readers[i] = std::thread(try_read_shared, i + 2);    }    writer.join();    for (auto& reader : readers) {        reader.join();    }    return 0;}

yTe28資訊網——每日最新資訊28at.com

總結

C++標準庫提供了多種類型的互斥鎖,每種鎖都有其特定的用途和特點。選擇合適的互斥鎖類型可以有效提高程序的并發性能和安全性。yTe28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-95917-0.htmlC++多線程中的互斥鎖

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go 1.23:擁抱iter包,簡化你的迭代邏輯

下一篇: C++ vs Rust vs Go 性能比較

標簽:
  • 熱門焦點
  • 8月總票房已突破10億!《封神》第一:口碑已經成了

    8月5日消息,據燈塔專業版數據,截至8月5日9時35分,8月總票房(含預售)已突破10億。其中,《封神》以大比分的優勢領先。根據官方消息,目前該片總票房已經超過14.
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記?! ”本┛萍冀逃w驗基
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美性大战久久久久久久蜜臀| 久久成人18免费观看| 国产又爽又黄的激情精品视频| 国产专区欧美专区| 亚洲精品视频一区| 亚洲一区二区三区四区中文| 欧美一区二区高清在线观看| 蜜桃久久av一区| 国产精品av久久久久久麻豆网| 国产欧美亚洲精品| 亚洲激情成人在线| 亚洲女性裸体视频| 巨胸喷奶水www久久久免费动漫| 欧美另类69精品久久久久9999| 国产精品嫩草影院av蜜臀| 激情欧美一区二区| 亚洲午夜小视频| 久久在线免费观看| 国产精品久久国产三级国电话系列 | 国产精品视频你懂的| 精品动漫3d一区二区三区免费版| 99re6这里只有精品视频在线观看| 性色一区二区三区| 欧美区在线观看| 黑人操亚洲美女惩罚| 日韩一级精品| 久久久久久久综合日本| 欧美偷拍另类| 亚洲国产91色在线| 午夜在线播放视频欧美| 欧美日本亚洲| 伊人久久综合| 香蕉成人久久| 欧美精品xxxxbbbb| 国产视频在线观看一区二区三区 | 欧美日韩成人激情| 韩国三级电影一区二区| 亚洲天堂偷拍| 欧美激情国产日韩| 狠狠干综合网| 亚洲综合三区| 欧美日韩国产高清视频| 精品福利免费观看| 亚洲欧美日韩一区在线观看| 欧美精品一区二区久久婷婷| 国产一区二区三区久久| 亚洲图片在线观看| 欧美日本高清视频| 亚洲第一区在线| 久久国产精品久久久| 国产精品久久看| 在线一区二区三区四区五区| 欧美成人国产| 在线精品亚洲| 久久噜噜亚洲综合| 国产一区二区av| 午夜亚洲视频| 国产精品一级在线| 亚洲一区二区三区午夜| 欧美日韩精品一区二区三区| 91久久精品日日躁夜夜躁欧美| 久久综合九色| 黄色亚洲网站| 久久久久久久97| 国产一区二区三区的电影| 午夜精品国产精品大乳美女| 国产精品大片免费观看| 亚洲视频网站在线观看| 欧美日韩国产成人| 日韩午夜激情| 欧美日韩精选| 亚洲另类黄色| 欧美日韩成人一区二区三区| 亚洲精选在线| 欧美日韩ab| 一级成人国产| 欧美色道久久88综合亚洲精品| 亚洲美女视频在线免费观看| 欧美激情精品久久久久久蜜臀| 亚洲欧洲日本一区二区三区| 欧美寡妇偷汉性猛交| 亚洲激情视频在线播放| 欧美黄色一级视频| 亚洲毛片一区| 欧美视频免费| 亚洲综合日韩中文字幕v在线| 国产精品久久久久久久电影| 亚洲在线一区二区| 国产伦精品一区二区| 欧美在线你懂的| 国内外成人免费视频| 久久亚洲国产精品一区二区| 在线成人小视频| 欧美夫妇交换俱乐部在线观看| 亚洲精品一二三区| 国产精品扒开腿做爽爽爽软件| 亚洲欧美另类在线| 国产日韩亚洲欧美综合| 久久久久亚洲综合| 最新69国产成人精品视频免费| 欧美日韩mv| 亚洲永久精品国产| 国产亚洲精品福利| 麻豆久久婷婷| 在线视频精品一区| 国产深夜精品| 欧美成人精品福利| 中文国产成人精品| 国产欧美综合在线| 毛片精品免费在线观看| 亚洲作爱视频| 国产女主播一区二区| 久久一区二区三区超碰国产精品| 亚洲国产一区在线| 欧美午夜一区二区| 久久久99久久精品女同性| 亚洲激精日韩激精欧美精品| 欧美少妇一区二区| 久久精品日产第一区二区| 91久久黄色| 国产精品影片在线观看| 久久午夜精品| 在线综合亚洲欧美在线视频| 国产一区二区三区高清| 欧美伦理一区二区| 欧美在线亚洲综合一区| 亚洲区一区二| 国产欧美69| 欧美成在线视频| 香蕉成人久久| 亚洲精品一区二区三区99| 国产精品免费福利| 欧美gay视频激情| 亚洲欧美视频在线| 91久久国产综合久久| 国产精品日韩电影| 欧美电影打屁股sp| 欧美一区国产二区| 99精品国产在热久久婷婷| 国产自产精品| 欧美肉体xxxx裸体137大胆| 久久先锋资源| 亚洲永久在线| 亚洲精品护士| 国语自产偷拍精品视频偷 | 一区二区三区在线高清| 欧美性jizz18性欧美| 免费亚洲一区| 久久99在线观看| 一区二区三区欧美| 亚洲电影成人| 国产日韩欧美在线观看| 欧美日韩一区免费| 欧美顶级少妇做爰| 久久久久久久91| 亚洲四色影视在线观看| 欧美在线一二三| 亚洲乱亚洲高清| 激情综合网激情| 国产农村妇女毛片精品久久莱园子 | 蜜桃久久精品乱码一区二区| 午夜精品久久久久久| 日韩午夜三级在线| 在线看片第一页欧美| 国产拍揄自揄精品视频麻豆| 欧美三级网址| 欧美精品日韩一本| 毛片av中文字幕一区二区| 欧美专区一区二区三区| 亚洲系列中文字幕| 亚洲精品在线三区| 亚洲国产第一页| 激情文学一区| 国产日韩在线不卡| 国产精品乱人伦一区二区| 欧美日韩亚洲国产一区| 欧美国产日韩精品免费观看| 玖玖综合伊人| 久久久久久97三级| 久久国产欧美日韩精品| 午夜精品视频在线观看一区二区| 亚洲图片欧美日产| 一二三区精品福利视频| 99国产精品99久久久久久粉嫩| 91久久精品久久国产性色也91| 在线精品一区| 在线观看成人一级片| 伊伊综合在线| 又紧又大又爽精品一区二区| 国内精品写真在线观看| 国产视频精品va久久久久久| 国产午夜精品一区二区三区视频| 国产精品综合久久久| 国产精品一区二区视频| 国产精品一区在线观看你懂的| 国产精品欧美日韩一区二区| 欧美视频专区一二在线观看| 欧美三级在线| 国产精品久久久久久久久免费| 国产精品地址| 国产乱码精品一区二区三区不卡| 国产麻豆精品在线观看| 国产精自产拍久久久久久| 国产伦理精品不卡|