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();
}
相关文章
用 C++ 读取 JSON 文件
发布时间:2023/08/25 浏览次数:145 分类:C++
-
本文将解释创建 JSON 文件,然后在编译器中从该文件读取数据的概念。 我们将使用 C++ 语言和 jsoncpp 库。本文使用Linux操作系统来完成上述任务。 不过,也可以在 Windows 操作系统上的 C++ 编译器
C++ 中的 Base 64 编码实现
发布时间:2023/08/25 浏览次数:182 分类:C++
-
本文将讨论 C++ 中的 base_64 编码。首先,我们将讨论 base_64 编码以及需要它的原因和位置。 稍后,我们将讨论 C++ 中的 base_64 编码/解码。
C++ 中的序列化库
发布时间:2023/08/25 浏览次数:134 分类:C++
-
在本文中,您将了解不同的 C++ 序列化库。首先,我们将了解序列化及其在 C++ 中的用途。 接下来,我们将讨论 C++ 中的序列化库以及如何在我们的程序中使用它们。
C++ 中的 time(NULL) 函数
发布时间:2023/08/24 浏览次数:162 分类:C++
-
本文将讨论 C++ 中的 time(NULL) 函数。C++ 中的 time(NULL) 函数 time() 函数,参数为 NULL,time(NULL),
C++类函数声明中的const关键字
发布时间:2023/08/24 浏览次数:136 分类:C++
-
在C++中,const关键字定义了那些在程序执行期间不会改变并保持不变的值。 对于变量及其保存的数据来说,这听起来非常简单。
C++ 中的 shellExecute() 函数
发布时间:2023/08/24 浏览次数:60 分类:C++
-
这个小型编程教程将讨论 C++ 中的 ShellExecute() 库函数。 该库函数主要用于通过C++程序打开或执行任何文件(例如脚本文件)。C++ 中的 ShellExecute() 函数
C++ 中默认参数的重新定义
发布时间:2023/08/24 浏览次数:170 分类:C++
-
在本文中,您将学习如何处理 C++ 中默认参数错误的重新定义。 C++ 中的默认参数必须在方法或函数的声明或定义中指定,但不能同时指定,因为存在重复。
C++ 形式参数的重新定义
发布时间:2023/08/24 浏览次数:133 分类:C++
-
在本文中,我们将讨论 C++ 中形式参数的重新定义问题。首先,我们将讨论函数定义和形式参数。 接下来,我们将讨论形式参数的重新定义问题。