std::shared_mutex 读写分离示例
时间: 2023-07-20 22:26:11 浏览: 103
下面是一个使用 std::shared_mutex 实现读写分离的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <shared_mutex>
#include <chrono>
std::shared_mutex g_mutex; // 全局共享互斥锁
int g_data = 0; // 全局共享数据
void reader(int id)
{
while (true)
{
std::shared_lock<std::shared_mutex> lock(g_mutex); // 获取读锁
std::cout << "Reader " << id << " read data: " << g_data << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500)); // 模拟读取数据的过程
}
}
void writer(int id)
{
while (true)
{
std::unique_lock<std::shared_mutex> lock(g_mutex); // 获取写锁
++g_data; // 修改共享数据
std::cout << "Writer " << id << " wrote data: " << g_data << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 模拟写入数据的过程
}
}
int main()
{
std::thread t1(reader, 1);
std::thread t2(reader, 2);
std::thread t3(writer, 1);
std::thread t4(writer, 2);
t1.join();
t2.join();
t3.join();
t4.join();
return 0;
}
```
在上面的示例中,我们定义了一个全局共享互斥锁 `g_mutex` 和一个全局共享数据 `g_data`。读线程通过获取共享互斥锁的读锁来读取共享数据,写线程则通过获取共享互斥锁的写锁来修改共享数据。在写线程修改共享数据时,读线程会等待写操作完成后才能继续读取共享数据。通过使用 std::shared_mutex 实现读写分离的互斥访问,可以提高读取共享数据的并发度,从而提高程序的性能。
阅读全文