多线程中,读写锁允许多个线程同时读取数据,但只允许一个线程写入数据,以提高并发性和数据一致性。c++++ 中的 std::shared_mutex 类提供了以下成员函数:lock(): 获取写入访问权限,当没有其他线程持有读取或写入锁时成功。lock_read(): 获取读取访问权限,可与其他读取锁或写入锁同时持有。unlock(): 释放写入访问权限。unlock_shared(): 释放读取访问权限。
C++ 多线程编程中读写锁的用途
概述
在多线程编程中,读写锁是一种同步机制,它允许多个线程同时读取共享数据,但只能有一个线程写入共享数据。这有助于提高并发性,同时确保数据的一致性。
实现
C++ 中的 std::shared_mutex 类实现了读写锁。它提供以下成员函数:
- lock(): 获取锁定的写入访问权限。只有当没有其他线程持有读取或写入锁时,此函数才成功。
- lock_read(): 获取锁定的读取访问权限。可以与其他读取锁或写入锁同时持有。
- unlock(): 释放锁定的写入访问权限。
- unlock_shared(): 释放锁定的读取访问权限。
示例用法
考虑以下代码,它使用读写锁来保护一个共享变量:
#include <iostream>
#include <shared_mutex>
std::shared_mutex m;
int shared_var = 0;
void reader() {
m.lock_read();
std::cout << "Reading: " << shared_var << 'n';
m.unlock_shared();
}
void writer() {
m.lock();
std::cout << "Writing: " << ++shared_var << 'n';
m.unlock();
}
int main() {
std::thread t1(reader);
std::thread t2(writer);
std::thread t3(reader);
t1.join();
t2.join();
t3.join();
}
输出:
Reading: 0
Writing: 1
Reading: 1