国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C++多線程中的互斥鎖

開發
C++標準庫提供了多種類型的互斥鎖,每種鎖都有其特定的用途和特點。選擇合適的互斥鎖類型可以有效提高程序的并發性能和安全性。

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

主要有以下幾種互斥鎖(Mutex):

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

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

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

std::mutex是最基本的互斥鎖,主要用于保護臨界區,確保同一時間只有一個線程可以訪問共享資源。

特點:

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

示例代碼:

#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;
}

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

std::timed_mutex在std::mutex的基礎上增加了超時功能,允許線程在指定時間內嘗試獲取鎖,如果在超時時間內未成功獲取鎖,則返回失敗。

特點:

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

示例代碼:

#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;
}

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

std::recursive_mutex允許同一線程多次獲取鎖而不會發生死鎖,這對于遞歸函數或需要多次鎖定的場景非常有用。

特點:

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

示例代碼:

#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;
}

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

std::recursive_timed_mutex結合了std::recursive_mutex和std::timed_mutex的特性,支持遞歸鎖定和超時機制。

特點:

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

示例代碼:

#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;
}

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

std::shared_mutex允許多個線程同時讀取,但只有一個線程可以寫入。這在讀多寫少的場景下非常有用。

特點:

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

示例代碼:


#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;
}

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

std::shared_timed_mutex結合了std::shared_mutex和std::timed_mutex的特性,支持超時機制。

特點:

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

示例代碼:


#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;
}

總結

C++標準庫提供了多種類型的互斥鎖,每種鎖都有其特定的用途和特點。選擇合適的互斥鎖類型可以有效提高程序的并發性能和安全性。

責任編輯:趙寧寧 來源: AI讓生活更美好
相關推薦

2025-12-08 06:40:00

2020-08-26 08:59:58

Linux線程互斥鎖

2024-06-28 08:45:58

2023-12-14 15:05:08

volatile代碼C++

2024-10-14 16:25:59

C#線程鎖代碼

2012-05-18 10:36:20

CC++編程

2021-03-24 08:02:58

C語言

2010-02-04 10:19:39

C++多線程

2010-02-05 15:30:54

C++多線程測試

2010-01-18 14:09:58

C++多線程

2021-02-25 15:58:46

C++線程編程開發技術

2021-03-05 07:38:52

C++線程編程開發技術

2025-05-06 08:20:00

互斥鎖C++編程

2024-06-24 12:57:09

多線程C++編程語言

2011-04-25 14:42:10

C#lock

2024-10-21 16:59:37

C#編程多線程

2025-02-17 02:00:00

Monitor機制代碼

2024-11-05 16:29:57

2024-02-02 18:29:54

C++線程編程

2011-06-14 15:25:28

C++多線程
點贊
收藏

51CTO技術棧公眾號

国产伦精品一区二区三| 一区二区三区久久网| 亚洲一区二区久久久久久| 男女羞羞在线观看| 99精品欧美一区二区三区小说| 精品国产一区av| 你懂的视频在线播放| 高清不卡一区二区在线| 7777精品伊久久久大香线蕉语言| 偷拍视频一区二区三区| 日韩欧美在线网址| 午夜免费高清视频| 国产一区二区三区免费看| 国产日韩欧美中文在线播放| 青青久久精品| 亚洲精品久久久久久下一站 | 狼人精品一区二区三区在线 | 日韩av电影中文字幕| 三级成人在线| 亚洲国产精品嫩草影院久久| 欧美孕妇孕交| 亚洲成人av在线电影| av高清资源| 亚洲欧美另类久久久精品| 国产小视频精品| 久久综合久久综合久久综合| 欧美成人高潮一二区在线看| 蜜桃一区二区三区在线| 图片区小说区区亚洲五月| 国产精品免费看| 久久久99爱| 久久99国产精品麻豆| 欧美日韩在线精品| 天堂资源在线中文精品| 欧美婷婷久久| 丝袜诱惑制服诱惑色一区在线观看| 97视频资源在线观看| 国产综合欧美| 日韩福利二区| 92国产精品观看| 2018av男人天堂| 一区二区三区四区亚洲| 青青草视频在线免费观看| 在线观看亚洲精品| 小黄鸭精品aⅴ导航网站入口| 亚洲大胆人体视频| 亚洲资源在线| 日产精品久久久一区二区福利| 一区二区影院| 精品久久免费观看| 99精品视频在线观看免费| 亚洲精品套图| 亚洲精品720p| 超碰在线亚洲| 你懂的视频在线一区二区| 成人精品高清在线| 在线视频中文字幕久| 欧美精品一区二区三区蜜桃| 九九热hot精品视频在线播放| 成人国内精品久久久久一区| 日本va欧美va瓶| 国产高潮av| 精品免费一区二区三区| 久久精品色播| 99色这里只有精品| 欧美亚洲综合一区| 99久久99九九99九九九| 日本在线观看不卡| 精品久久久久国产| 午夜免费欧美电影| 在线观看日韩片| 欧美群妇大交群中文字幕| 欧美亚洲tv| 黄色高清无遮挡| 亚洲经典中文字幕| 在线视频亚洲| 日韩在线资源| 99热在线国产| 欧美网站在线观看| 日本欧美国产| 97在线观看免费高清视频| 久久国产精品久久久久久| 日韩经典中文字幕一区| 免费av不卡| 国产在线精品一区二区三区| 亚洲成人一区二区在线观看| 女人av一区| 国产美女极品在线| 成人xxxx视频| 欧亚洲嫩模精品一区三区| 色综合天天爱| 在线观看黄色片| 99国产高清| 91精品国产综合久久久久久| 日韩av中文在线观看| 国产黄a三级三级三级av在线看| 国产美女搞久久| 亚洲国产你懂的| 国产精品7m凸凹视频分类| 91这里只有精品| 一道精品一区二区三区| 在线观看不卡av| 国产精品护士白丝一区av| 久久悠悠精品综合网| 首播影院在线观看免费观看电视| 国产精品吴梦梦| 日本韩国一区二区三区视频| 狠狠爱成人网| 日韩不卡在线| 女人黄色片免费| 久久婷婷国产综合尤物精品| 日韩精品福利网站| 中文字幕一区二区三区色视频| 欧美顶级大胆免费视频| 成年视频在线观看| 欧美日韩精品在线一区二区| 国产精品偷伦一区二区| 精品va天堂亚洲国产| 亚洲日本在线天堂| 日日摸夜夜添夜夜添亚洲女人| 精品视频一区二区三区| 亚洲成人三级| 玩弄japan白嫩少妇hd| 国产一区自拍视频| 国内精品伊人久久| 亚洲欧美国产另类| 欧美区视频在线观看| 国产精品女同一区二区三区| 日韩精品一级二级| 色中色综合网| 国产午夜一区| 欧美激情啪啪| 免费网站黄在线观看| 日韩男人天堂| 一本久道综合色婷婷五月| 日本一区二区三区视频免费看| 国产欧美日韩精品在线观看 | 免费毛片b在线观看| 尤物视频免费在线观看| 成人网18免费软件大全| 欧美牲交a欧美牲交aⅴ免费真| 在线看无码的免费网站| 国产精品久久久久久久小唯西川| 91精品国产乱码久久久久久蜜臀| 永久555www成人免费| 日韩精品免费在线视频| 精品日韩在线观看| 51午夜精品国产| 在线观看av一区二区| 午夜不卡av免费| 色综合视频一区二区三区高清| 亚洲精品国产精品乱码不99| 亚洲三级小视频| 精品久久久在线观看| 在线亚洲欧美专区二区| 色综合一区二区三区| 欧美日韩亚洲综合在线| 欧美一级夜夜爽| 精品视频久久久久久久| 亚洲性日韩精品一区二区| 中日韩美女免费视频网址在线观看 | 狠狠躁夜夜躁人人爽天天天天97 | 国模精品视频一区二区| 国产成人精品优优av| 91久久在线观看| 欧美二区在线| www.国产二区| 日本免费专区| 免费在线毛片网站| 国产国产一区| 另类春色校园亚洲| 一区二区国产在线观看| 国产成人亚洲精品青草天美| 国产精品久久久久久久久免费樱桃| 午夜激情一区二区三区| 精品国产乱码久久久久久夜甘婷婷 | 国产凹凸在线观看一区二区 | 日本三级中文字幕在线观看| 无码专区aaaaaa免费视频| 美女被人操视频在线观看| 香蕉成人app免费看片| 国产精品亚洲一区二区在线观看| 91精品秘密在线观看| 国产一区二区美女| 欧美性生交大片免费| 国产一区二区三区精品久久久| 国产精品丝袜久久久久久高清 | 久久国产精品99精品国产| 中文字幕一区二区三区精华液| 日韩精品一区二区三区蜜臀| 热久久免费视频精品| 国产高潮呻吟久久久| 激情视频在线观看免费| 亚洲日本视频在线| 国产成人aaa| 欧美一级二级三级蜜桃| 亚洲japanese制服美女| 波多野结衣在线中文| 91成人精品在线| 国产电影一区二区三区|