cpp thread中使用 读写锁
时间: 2023-10-24 10:24:58 浏览: 78
在C++中,读写锁是一种线程同步机制,它允许多个线程同时读取共享数据,但是只有一个线程能够写入共享数据。这种机制可以提高并发性能,因为多个线程可以并发地读取数据,而写入数据时只能有一个线程进行,避免了写入竞争的问题。
下面是使用读写锁的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::shared_timed_mutex rw_mutex;
int shared_data = 0;
void reader() {
std::cout << "Reader thread " << std::this_thread::get_id() << " started." << std::endl;
// 读取共享数据
{
std::shared_lock<std::shared_timed_mutex> lock(rw_mutex);
std::cout << "Reader thread " << std::this_thread::get_id() << " read data: " << shared_data << std::endl;
}
}
void writer() {
std::cout << "Writer thread " << std::this_thread::get_id() << " started." << std::endl;
// 写入共享数据
{
std::unique_lock<std::shared_timed_mutex> lock(rw_mutex);
shared_data++;
std::cout << "Writer thread " << std::this_thread::get_id() << " wrote data: " << shared_data << std::endl;
}
}
int main() {
std::thread t1(reader);
std::thread t2(reader);
std::thread t3(reader);
std::thread t4(writer);
std::thread t5(writer);
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
return 0;
}
```
在上面的示例代码中,我们使用了`std::shared_timed_mutex`类来创建一个读写锁。在读取共享数据时,我们使用了`std::shared_lock`类来获取读取锁,而在写入共享数据时,我们使用了`std::unique_lock`类来获取写入锁。这两个类都是C++11中新增加的类,用于提供线程安全的读写锁机制。
在主函数中,我们创建了3个读取线程和2个写入线程,它们并发地访问了共享数据。由于使用了读写锁,多个读取线程可以同时读取数据,而写入线程则会在获取写入锁后才能进行写入操作。这样可以避免读写竞争问题,提高程序的并发性能。
阅读全文