采用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 );

 

原文链接: https://www.cnblogs.com/azbane/p/15813403.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398241

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月12日 上午9:35
下一篇 2023年4月12日 上午9:35

相关推荐