迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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();

}

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

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

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()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便