C++ 中读/写锁的概念
读/写锁是一种同步机制,允许线程获取读或写锁,以便一个线程在修改资源时不会阻止另一个线程访问该资源。
它们通常用于实现只读共享数据结构,例如全局缓存或查找表。 读/写锁可以使用条件变量或互斥锁来实现。
读/写锁的目的和用途
当读取器无法更改数据时,使用读取器锁。 当写入者想要独占访问权限来修改数据时,将使用写入者锁。
读卡器锁也称为“只读”锁,常见于多用户系统中。 它们允许一个或多个读取者访问数据而不影响数据,而写入者只有在拥有独占访问权的情况下才能更改数据。
另一方面,当一次只有一个人需要能够在文件中写入更改时,会使用写入者锁。 这可以防止同时写入,并确保不同人在不同时间进行的更新之间不会发生冲突。
在 C++ 中实现读取器/写入器锁的步骤
在C++中,读/写锁可以通过几个步骤来实现。
- 首先,必须使用一个指向该锁保护的资源的shared_ptr 来初始化该锁。
- 其次,必须创建一个函数来在需要时获取和释放锁。
- 第三,必须在适当的时间调用获取和释放函数。
- 第四,需要创建一个函数来检查是否有任何其他线程正在等待已持有该资源的同一资源,如果是,则等到它们释放该资源后再再次获取该资源。
- 第五,从第二步的获取和释放函数中调用此函数。
例子:
#include <iostream>
#include <mutex>
#include <shared_mutex>
#include <thread>
using namespace std;
class demo {
public:
void sam() {
unique_lock lock(mutex_);
++b;
}
unsigned int get() {
shared_lock lock(mutex_);
return b;
}
private:
mutable shared_mutex mutex_;
unsigned int b = 0;
};
int main() {
demo tbh;
auto sam_and_roi = [&tbh]() {
for (int x = 0; x < 6; x++) {
tbh.sam();
cout << this_thread::get_id() << tbh.get() << '\n';
}
};
thread start(sam_and_roi);
start.join();
}
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。