C++ 多线程中的读写锁是怎么实现的
时间: 2024-04-07 20:33:43 浏览: 104
C++中的读写锁(ReadWrite Lock)是一种线程同步机制,用于在多线程环境下实现对共享资源的读写操作。它允许多个线程同时读取共享资源,但只允许一个线程进行写操作。
在C++中,读写锁的实现通常使用std::shared_mutex类(也称为shared_mutex)来实现。它是C++14标准引入的一个新特性,提供了读写锁的功能。
使用std::shared_mutex时,可以使用两种不同的锁来进行操作:
1. std::shared_lock:用于共享资源的读取操作。多个线程可以同时获取共享锁,并且不会阻塞彼此。
2. std::unique_lock:用于独占资源的写入操作。只允许一个线程获取独占锁,并且其他线程无法获取共享锁。
通过使用这两种不同的锁,可以实现对共享资源的读写操作的并发性。
下面是一个简单的示例代码,演示了如何使用std::shared_mutex实现读写锁:
```cpp
#include <iostream>
#include <shared_mutex>
#include <thread>
std::shared_mutex rwMutex;
int sharedData = 0;
void ReadData()
{
std::shared_lock<std::shared_mutex> lock(rwMutex);
std::cout << "Read data: " << sharedData << std::endl;
}
void WriteData()
{
std::unique_lock<std::shared_mutex> lock(rwMutex);
sharedData++;
std::cout << "Write data: " << sharedData << std::endl;
}
int main()
{
std::thread t1(ReadData);
std::thread t2(ReadData);
std::thread t3(WriteData);
t1.join();
t2.join();
t3.join();
return 0;
}
```
在上述示例中,三个线程分别执行了读取操作和写入操作。使用std::shared_lock获取共享锁来实现读取操作,使用std::unique_lock获取独占锁来实现写入操作。这样可以保证在写入操作时不会有其他线程同时进行读取或写入操作。
需要注意的是,std::shared_mutex是C++14引入的特性,因此在使用之前,请确保编译器支持C++14标准。如果编译器不支持C++14,也可以使用第三方库或自行实现读写锁。
阅读全文