当前位置: 首页 > news >正文

03 线程间共享数据

unique_lock

  • 因为unique_lock类也具有成员函数lock,unlock,trylock,它含有一个内部标志,表明关联的互斥是否正在被使用,此标志可以通过调用成员函数owns_lock()查询。

1 在初始化过程中保护共享数据

  • 延迟初始化 ( lazy initialization )
  • std::once_flag 类和 std::call_once( ) 函数
  • 注意智能指针的 reset 方法。
std::shared_ptr<some_resource> resource_ptr;
std::mutex resource_mutex;
void foo()
{std::unique_lock<std::mutex> lk(resource_mutex);if(!resource_ptr){resource_ptr.reset(new some_resource);}lk.unlock();resource_ptr->do_something();
}

2 保护很少更新的数据 ( 读多写少 )

  • 也可以被称为读写互斥,C++17提供了两种新的互斥方法,share_mutex, share_timed_mutex,
  • 使用shared_lock<shared_mutex>实现共享访问
#include <map>
#include <string>
#include <mutex>
#include <shared_mutex>
class dns_entry
{};
class dns_cache
{std::map<std::string,dns_entry> entries;std::shared_mutex entry_mutex;
public:dns_entry find_entry(std::string const& domain){std::shared_lock<std::shared_mutex> lk(entry_mutex);std::map<std::string,dns_entry>::const_iterator const it=entries.find(domain);return (it==entries.end())?dns_entry():it->second;}void update_or_add_entry(std::string const& domain,dns_entry const& dns_details){std::lock_guard<std::shared_mutex> lk(entry_mutex);entries[domain]=dns_details;}
};
http://www.lryc.cn/news/108246.html

相关文章:

  • 题目:2264.找到一个数字的 K 美丽度
  • 分布式ID性能评测:CosId VS 美团 Leaf
  • MySQL数据库安装(二)
  • 通过MySQL删除Hive元数据信息
  • 在电脑如何翻译文件名称并同时保存原文件名和新文件名称
  • Modbus协议简介与常用测试指令说明
  • EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?
  • kubernetes 集群利用 efk 收集容器日志
  • 安防视频监控汇聚平台EasyCVR在移动端火狐浏览器中云台显示的优化
  • selenium官文文档阅读总结(day 3)
  • 【pandas百炼成钢】数据预览与预处理
  • 怎么查到企业的供应商和客户?
  • 智能物流千人俱乐部---行业必备神器
  • uniapp uview文件上传的文件不是文件流,该如何处理?用了uni.chooseImage预览功能要如何做
  • pktgen-dpdk arm编译问题 “Platform must be built with RTE_FORCE_INTRINSICS“
  • 用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格
  • 容器技术:Docker搭建(通俗易懂)
  • Day 16 C++ 友元(friend)
  • 步进电机1
  • PHP-简单项目引起的大麻烦--【白嫖项目】
  • Excel如何把两列互换
  • Java基础面试题2
  • Typescript 第八章 异步编程,并行和并发(JavaScript事件循环,异步流,多线程类型安全)
  • c++ 打印当前时间(精确到毫秒)
  • mapstruct 错误 java.lang.NoSuchMethodError: Ljava/lang/Double 错误
  • SpringBoot+AOP+Redission实战分布式锁
  • Linux系统---进程概念
  • ELK常用语法和线上问题排查
  • session-cookies 三个缓存 localStorage、sessionStorage、Cookies。
  • LA@行列式性质