std::shared_lock
时间: 2023-11-16 22:17:41 浏览: 162
C++11 std::shared_ptr总结与使用示例代码详解
std::shared_lock 是 C++11 中提供的一个线程安全的共享读锁(shared read lock)类。它用于实现共享/独占的读写锁模式,其中多个线程可以同时获得共享读锁,但只有一个线程可以获得独占写锁。
使用 std::shared_lock 可以实现共享读取数据的并发访问,因为多个线程可以同时持有共享锁,而不会互相阻塞。这在某些场景下可以提高性能。
下面是一个简单的示例代码,演示了如何使用 std::shared_lock:
```cpp
#include <iostream>
#include <shared_mutex>
#include <thread>
std::shared_mutex mutex;
int sharedData = 0;
void reader() {
std::shared_lock<std::shared_mutex> lock(mutex);
std::cout << "Reader: sharedData = " << sharedData << std::endl;
}
void writer() {
std::unique_lock<std::shared_mutex> lock(mutex);
sharedData++;
std::cout << "Writer: sharedData incremented" << std::endl;
}
int main() {
std::thread t1(reader);
std::thread t2(reader);
std::thread t3(writer);
t1.join();
t2.join();
t3.join();
return 0;
}
```
在上面的示例中,我们创建了一个共享读写锁 `mutex` 和一个共享的变量 `sharedData`。`reader` 函数使用 `std::shared_lock` 来获取共享锁并读取 `sharedData`,而 `writer` 函数使用 `std::unique_lock` 来获取独占锁并增加 `sharedData` 的值。
在 `main` 函数中,我们创建了两个读线程和一个写线程。读线程使用共享锁进行读取操作,而写线程使用独占锁进行写入操作。
需要注意的是,`std::shared_lock` 是在 C++17 中引入的,如果你使用的是 C++11 或 C++14,可以使用 `boost::shared_lock` 来实现类似的功能。
阅读全文