• 采用C++17新标准 “共享锁”和“独占锁”更低消耗更好性能地保护不常更新的共享数据


    用到的标准库:

    std::shared_lock<>、  std::shared_mutex、 std::lock_guard<>。 另外还有 std::shared_timed_mutex(此处不讲)。

    分析:对于保护不常更新的共享数据, 因为写只是很偶然的发生,更频繁的是读取。如果不区分  “读者” 和 “作者” ,简单的使用 std::mutex, 会有很多消耗的浪费。 例如,DNS域名解析服务, 当没有新的设备接入时,入口表可能一个星期检查,并细微的更新一次。 这种情况就非常适合我们即将讲到的情况。

    C++17 提供的 “共享锁” 和 “独占锁” 机制, 当多个读者到来时,它们可同时获取共享锁进行读取; 当某个写着到来时, 先获取共享锁,然后等待当前已存在的读者读取结束, 之后进一步获取独占锁进行写入。要注意的是, 在写着 “等待” 当前读者读取结束这个环节,另外的读取或者写入将不能获取共享锁, 直到当前的写着结束写之后,其它的写着,或者读者,才能进行锁的获取。

    有几个要注意的点:

    1. C++17标准

    2. 对于读者获取共享锁的方式:

      std::shared_lock<std::shared_mutex>  shlk( mtx);

    3. 对于写着获取独占锁的方式:

          std::lock_guard<std::shared_mutex> lkgd( mtx );

  • 相关阅读:
    git学习记录——基础概念和文件的基本操作
    java 之 Properties 类
    java 之 Map类
    java 之 迭代器
    java 之 Collection类
    java 之日期时间操作
    java 之String类
    如何把ASP.NET MVC项目部署到本地IIS上
    [工具]Visual Studio
    [MVC][Shopping]Copy Will's Code
  • 原文地址:https://www.cnblogs.com/azbane/p/15813403.html
Copyright © 2020-2023  润新知