迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中读/写锁的概念

作者:迹忆客 最近更新:2023/08/25 浏览次数:

读/写锁是一种同步机制,允许线程获取读或写锁,以便一个线程在修改资源时不会阻止另一个线程访问该资源。

它们通常用于实现只读共享数据结构,例如全局缓存或查找表。 读/写锁可以使用条件变量或互斥锁来实现。


读/写锁的目的和用途

当读取器无法更改数据时,使用读取器锁。 当写入者想要独占访问权限来修改数据时,将使用写入者锁。

读卡器锁也称为“只读”锁,常见于多用户系统中。 它们允许一个或多个读取者访问数据而不影响数据,而写入者只有在拥有独占访问权的情况下才能更改数据。

另一方面,当一次只有一个人需要能够在文件中写入更改时,会使用写入者锁。 这可以防止同时写入,并确保不同人在不同时间进行的更新之间不会发生冲突。


在 C++ 中实现读取器/写入器锁的步骤

在C++中,读/写锁可以通过几个步骤来实现。

  1. 首先,必须使用一个指向该锁保护的资源的shared_ptr 来初始化该锁。
  2. 其次,必须创建一个函数来在需要时获取和释放锁。
  3. 第三,必须在适当的时间调用获取和释放函数。
  4. 第四,需要创建一个函数来检查是否有任何其他线程正在等待已持有该资源的同一资源,如果是,则等到它们释放该资源后再再次获取该资源。
  5. 第五,从第二步的获取和释放函数中调用此函数。

例子:

#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 文件

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

用 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++ 中形式参数的重新定义问题。首先,我们将讨论函数定义和形式参数。 接下来,我们将讨论形式参数的重新定义问题。

C++ 工厂方法

发布时间:2023/08/24 浏览次数:78 分类:C++

工厂方法是 C++ 中的一种对象创建设计模式,用于创建对象同时隐藏其组合,以便用户可以使用接口而无需看到任何方法调用。C++ 中的工厂方法 工厂是虚拟构造函数,允许程序员设计让用户与

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便