std::shared_mutex 读写锁
学习 shared_mutex 实现读共享、写独占的并发控制。 · 难度:入门 · +15XP
std::shared_mutex 读写锁
shared_mutex 允许多个读线程同时获取共享锁,但写线程必须获得独占锁,其它所有线程(读和写)必须等待。适用于读多写少的场景,可大幅提升并发性能。使用 lock_shared() / unlock_shared() 获取/释放共享锁,lock() / unlock() 获取/释放独占锁。C++17 起可用 std::shared_lock 和 std::unique_lock 简化管理。
#include <shared_mutex>
#include <thread>
#include <iostream>
#include <vector>
std::shared_mutex sh_mtx;
int data = 0;
void reader(int id) {
std::shared_lock lock(sh_mtx);
std::cout << "Reader " << id << " reads: " << data << '
';
} // 自动解锁
void writer(int id, int val) {
std::unique_lock lock(sh_mtx);
data = val;
std::cout << "Writer " << id << " writes: " << data << '
';
}
int main() {
std::vector<std::thread> threads;
for (int i = 0; i < 3; ++i) threads.emplace_back(reader, i);
threads.emplace_back(writer, 1, 42);
for (auto& t : threads) t.join();
return 0;
}