以下是一个示例,演示了如何在 C++ 中使用读写锁(std::shared_mutex)实现读写线程之间的同步:
#include <iostream>
#include <thread>
#include <shared_mutex>
#include <vector>
// 共享资源
std::vector<int> sharedData;
std::shared_mutex rwMutex;
// 读线程函数
void readerFunction(int id) {
std::shared_lock<std::shared_mutex> lock(rwMutex);
std::cout << "Reader " << id << ": Reading shared data: ";
for (int data : sharedData) {
std::cout << data << " ";
}
std::cout << std::endl;
}
// 写线程函数
void writerFunction(int id, int value) {
std::unique_lock<std::shared_mutex> lock(rwMutex);
std::cout << "Writer " << id << ": Writing value " << value << std::endl;
sharedData.push_back(value);
}
int main() {
// 创建若干个读线程和写线程
std::vector<std::thread> readers;
std::vector<std::thread> writers;
for (int i = 0; i < 5; ++i) {
readers.emplace_back(readerFunction, i);
writers.emplace_back(writerFunction, i, i * 10);
}
// 等待所有读线程和写线程执行完成
for (std::thread &reader : readers) {
reader.join();
}
for (std::thread &writer : writers) {
writer.join();
}
return 0;
}
在这个示例中,我们有多个读线程和写线程,它们访问一个共享的数据结构 sharedData。读线程使用了 std::shared_lock<std::shared_mutex> 来获取共享锁,写线程使用了 std::unique_lock<std::shared_mutex> 来获取独占锁。
读线程和写线程之间共享一个读写锁 rwMutex,它允许多个读线程同时访问共享资源,但是在写入时需要独占锁。这样就提高了程序的并发性能。
在 main 函数中,我们创建了多个读线程和写线程,并等待它们执行完成。读线程输出共享数据的内容,写线程将新数据写入共享数据结构中。