std::shared_mutex是C++17引入的读写锁机制,允许多个线程共享读锁、单个线程独占写锁,适用于读多写少场景,需包含<shared_mutex>头文件并启用C++17,推荐使用std::shared_lock和std::unique_lock进行RAII管理以确保异常安全和防止死锁。

std::shared_mutex 是 C++17 引入的一个同步原语,用于实现高效的读写锁机制。它允许多个线程同时进行读操作(共享访问),但在写操作(独占访问)时只允许一个线程执行,并且会阻塞所有其他读和写线程。这种机制非常适合“读多写少”的场景,比如缓存、配置管理等。
#include <shared_mutex>
g++ -std=c++17 your_file.cpp
#include <iostream>
#include <thread>
#include <vector>
#include <shared_mutex>
#include <chrono>
std::vector<int> data = {1, 2, 3};
std::shared_mutex shm;  // 共享互斥量
// 读操作函数
void reader(int id) {
    shm.lock_shared();  // 获取共享锁
    std::cout << "Reader " << id << " sees data: ";
    for (int d : data) {
        std::cout << d << " ";
    }
    std::cout << "\n";
    std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟处理时间
    shm.unlock_shared();  // 释放共享锁
}
// 写操作函数
void writer(int id) {
    shm.lock();  // 获取独占锁
    std::cout << "Writer " << id << " is writing...\n";
    data.push_back(id);
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    std::cout << "Writer " << id << " finished writing.\n";
    shm.unlock();  // 释放独占锁
}
int main() {
    std::vector<std::thread> threads;
    // 启动 5 个读线程
    for (int i = 1; i <= 5; ++i) {
        threads.emplace_back(reader, i);
    }
    // 启动 2 个写线程
    for (int i = 10; i <= 11; ++i) {
        threads.emplace_back(writer, i);
    }
    // 启动更多读线程
    for (int i = 6; i <= 10; ++i) {
        threads.emplace_back(reader, i);
    }
    // 等待所有线程完成
    for (auto& t : threads) {
        t.join();
    }
    return 0;
}
Reader 1 sees data: 1 2 3 Reader 2 sees data: 1 2 3 ... Writer 10 is writing... Writer 10 finished writing. Reader 6 sees data: 1 2 3 10 ...
void reader(int id) {
    std::shared_lock<std::shared_mutex> lock(shm);  // 自动加共享锁,析构时释放
    std::cout << "Reader " << id << " sees data: ";
    for (int d : data) {
        std::cout << d << " ";
    }
    std::cout << "\n";
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}  // lock 在这里自动释放
void writer(int id) {
    std::unique_lock<std::shared_mutex> lock(shm);  // 独占锁
    std::cout << "Writer " << id << " is writing...\n";
    data.push_back(id);
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
    std::cout << "Writer " << id << " finished writing.\n";
}  // lock 析构时自动释放
以上就是c++++怎么使用std::shared_mutex实现读写锁_c++读写锁shared_mutex用法详解的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号