C++?實現(xiàn)讀寫鎖的代碼詳解
下面是一個簡單的 C++ 實現(xiàn)讀寫鎖的示例:
#include <iostream>
#include <mutex>
#include <condition_variable>
class ReadWriteLock {
private:
std::mutex mutex_;
std::condition_variable read_cv_;
std::condition_variable write_cv_;
int readers_;
bool writing_;
public:
ReadWriteLock() : readers_(0), writing_(false) {}
void lockRead() {
std::unique_lock<std::mutex> lock(mutex_);
// 如果有線程正在進行寫操作或者等待寫操作,則阻塞等待
while (writing_) {
read_cv_.wait(lock);
}
readers_++;
}
void unlockRead() {
std::unique_lock<std::mutex> lock(mutex_);
readers_--;
if (readers_ == 0) {
write_cv_.notify_one(); // 喚醒等待寫操作的線程
}
}
void lockWrite() {
std::unique_lock<std::mutex> lock(mutex_);
// 如果有線程正在讀或?qū)?,則阻塞等待
while (writing_ || readers_ > 0) {
write_cv_.wait(lock);
}
writing_ = true;
}
void unlockWrite() {
std::unique_lock<std::mutex> lock(mutex_);
writing_ = false;
read_cv_.notify_all(); // 喚醒等待讀操作的線程
write_cv_.notify_one(); // 喚醒等待寫操作的線程
}
};
// 示例用法
ReadWriteLock rwLock;
void readerFunction(int id) {
while (true) {
rwLock.lockRead();
// 執(zhí)行讀取操作
std::cout << "Reader " << id << " is reading" << std::endl;
rwLock.unlockRead();
// 休眠一段時間模擬讀取過程
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
void writerFunction(int id) {
while (true) {
rwLock.lockWrite();
// 執(zhí)行寫入操作
std::cout << "Writer " << id << " is writing" << std::endl;
rwLock.unlockWrite();
// 休眠一段時間模擬寫入過程
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
}
}
int main() {
// 創(chuàng)建多個讀者線程和寫者線程進行測試
std::thread readers[3];
std::thread writers[2];
for (int i = 0; i < 3; i++) {
readers[i] = std::thread(readerFunction, i);
}
for (int i = 0; i < 2; i++) {
writers[i] = std::thread(writerFunction, i);
}
// 等待所有線程結(jié)束
for (auto& reader : readers) {
reader.join();
}
for (auto& writer : writers) {
writer.join();
}
return 0;
}
在上述示例中,ReadWriteLock 類實現(xiàn)了讀寫鎖的基本功能。lockRead() 和 unlockRead() 方法用于獲取和釋放讀鎖,lockWrite() 和 unlockWrite() 方法用于獲取和釋放寫鎖。
在主函數(shù)中,創(chuàng)建了多個讀者線程和寫者線程來模擬并發(fā)讀寫操作。讀者線程使用 lockRead() 和 unlockRead() 獲取和釋放讀鎖,寫者線程使用 lockWrite() 和 unlockWrite() 獲取和釋放寫鎖。
通過使用互斥量(std::mutex)、條件變量(std::condition_variable)以及共享的計數(shù)器和標(biāo)志位來實現(xiàn)讀寫鎖的功能,并確保讀者和寫者之間的互斥和同步。
到此這篇關(guān)于C++ 實現(xiàn)讀寫鎖的代碼詳解的文章就介紹到這了,更多相關(guān)C++ 實現(xiàn)讀寫鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)職工工資管理系統(tǒng)的示例代碼
這篇文章主要為大家詳細(xì)介紹了C語言如何實現(xiàn)職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
基于C語言char與unsigned char的區(qū)別介紹
本篇文章小編為大家介紹,基于C語言char與unsigned char的區(qū)別介紹。需要的朋友參考下2013-04-04
C語言 fscanf 和 fprintf函數(shù)示例詳解

