C++ 标准的读写锁

news/2024/11/8 3:09:18/

下面是一个使用C++11标准的读写锁的例子:

//c++
#include <iostream>
#include <thread>
#include <mutex>
#include <shared_mutex>

std::shared_mutex rw_mutex; // 读写锁

void read_data(int id) {
    std::shared_lock<std::shared_mutex> lock(rw_mutex); // 读锁
    std::cout << "Reader " << id << " is reading data." << std::endl;
    // 读取数据的操作
}

void write_data(int id) {
    std::unique_lock<std::shared_mutex> lock(rw_mutex); // 写锁
    std::cout << "Writer " << id << " is writing data." << std::endl;
    // 写入数据的操作
}

int main() {
    std::thread readers[5];
    std::thread writers[2];

    // 创建5个读者线程
    for (int i = 0; i < 5; ++i) {
        readers[i] = std::thread(read_data, i);
    }

    // 创建2个写者线程
    for (int i = 0; i < 2; ++i) {
        writers[i] = std::thread(write_data, i);
    }

    // 等待所有线程执行完毕
    for (int i = 0; i < 5; ++i) {
        readers[i].join();
    }
    for (int i = 0; i < 2; ++i) {
        writers[i].join();
    }

    return 0;
}
```

//在上面的例子中,我们使用了`std::shared_mutex`类来实现读写锁。读者线程使用 

//`std::shared_lock`类来获取读锁,写者线程使用`std::unique_lock`类来获取写锁。
//在读锁被持有时,其他读者线程可以同时获取读锁,但写者线程必须等待读锁被释放。在写锁被

//持有时,其他读者线程和写者线程都必须等待写锁被释放。


http://www.ppmy.cn/news/291359.html

相关文章

嵌入式系统学习

5.嵌入式系统 对于嵌入式系统来说 首先有硬件 例如 处理器 计时器 中断控制器 输入输出设备 记忆 和接口 然后有软件 可以同时&#xff08;concurrently&#xff09;执行一系列任务或多个任务 还有实时操作系统RTOS &#xff08;real-time operating system&#xff09;RTO…

游戏分类

文章目录 游戏分类思维导图详细介绍游戏平台游戏载体电子游戏非电子游戏 游戏内容角色扮演类游戏模拟类游戏策划类游戏冒险类游戏动作类游戏 游戏对抗方式PVEPVP 游戏市场的热点 游戏分类 思维导图 详细介绍 上面是对游戏简略的分类&#xff0c;下面会对游戏的分类进行详细的…

万字详解自动驾驶定位技术

文章目录 车路协同自动驾驶1 高精度地图1.1 高精度地图定义及价值1.1.1 高精度地图的分层结构1.1.2 高精度地图对自动驾驶的价值1.1.3 高精度地图行业现状 1.2 高精度地图关键技术1.2.1 道路元素[图像处理](https://so.csdn.net/so/search?q图像处理&spm1001.2101.3001.70…

再转一篇,回头研究一下 用手机连接笔记本上网

问&#xff1a;本人经常出差&#xff0c;希望用手机连接笔记本进行上网和收发电邮。请指教需要何种硬件和软件。 答&#xff1a;目前手机配合笔记本电脑上网方法主要有三种方式&#xff1a;红外线接入、专用RS-232C 串行电缆接入、PC卡接入 。采用这几种方式接入Internet&…

NDS程序开发可行性分析报告

一、综述 Nintendo Double Screen (简称NDS)是日本任天堂公司于 2004年 12月 2日 所发售的一款便携式的娱乐掌机。它的最大特点是分为上下两屏&#xff0c;上屏为显示屏&#xff0c;下屏为触摸屏&#xff0c;并因此得名。也恰恰是这个与众不同的触摸屏&#xff0c;给它带来了两…

React使用Electron开发桌面端

React是一个流行的JavaScript库&#xff0c;用于构建Web应用程序。结合Electron框架&#xff0c;可以轻松地将React应用程序打包为桌面应用程序。以下是使用React和Electron开发桌面应用程序的步骤&#xff1a; 1. 安装Electron 首先&#xff0c;你需要安装Electron。在终端中…

纤亿通带您了解光开关是如何工作的?

什么是光开关&#xff1f;对光开关最直接的理解是用于打开或关闭光电路的装置。它由封装外壳&#xff0c;光学器件以及电子元器件组成。在光网络中&#xff0c;我们通常需要通过切换路由来保护整个网络链路。这意味着光开关的关键属性必须使其能够在一个位置长时间可靠地运行。…

光电通TOEC OEP810 打印机驱动

光电通TOEC OEP810 打印机驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有…