当前位置: 首页 > 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;}
};

相关文章:

03 线程间共享数据

unique_lock 因为unique_lock类也具有成员函数lock&#xff0c;unlock&#xff0c;trylock&#xff0c;它含有一个内部标志&#xff0c;表明关联的互斥是否正在被使用&#xff0c;此标志可以通过调用成员函数owns_lock()查询。 1 在初始化过程中保护共享数据 延迟初始化 ( l…...

题目:2264.找到一个数字的 K 美丽度

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2269. 找到一个数字的 K 美丽值 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用滑动窗口遍历判断&#xff0c;窗口中放置 k 个数字&#xff0c;每次后移一位。 解题代码&#xff1a; c…...

分布式ID性能评测:CosId VS 美团 Leaf

环境 MacBook Pro (M1)JDK 17JMH 1.36运行在本机 Docker 内的 mariadb:10.6.4 运行 CosId SegmentChainId 模式&#xff0c;基准测试代码&#xff1a; Benchmarkpublic long generate() {return segmentChainId.generate();}Leaf 基准测试代码&#xff1a; Benchmarkpublic l…...

MySQL数据库安装(二)

夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库概述(一), 如果没有看过, 请观看上一章 一. MySQL 卸载 一.一 停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话…...

通过MySQL删除Hive元数据信息

之前遇到过一个问题&#xff0c;在进行Hive的元数据采集时&#xff0c;因为Hive表的文件已经被删除了&#xff0c;当时是无法删除表&#xff0c;导致元数据采集也发生了问题&#xff0c;所以希望通过删除Hive表的元数据解决上述问题。 之前安装时&#xff0c;经过特定的配置后…...

在电脑如何翻译文件名称并同时保存原文件名和新文件名称

不知道大家在日常工作中有没有遇见到文件名英语或其他评论文字需要翻译成中文呢&#xff0c;翻译成中文后&#xff0c;需要把原来文件名称一起保存下来&#xff0c;呈现上新文件名上。也是通俗的说法&#xff0c;新文件名称也有原文件名称在呢。这个就有点难度吧。一般我们常见…...

Modbus协议简介与常用测试指令说明

DateAuthorVersionNote2022.07.19Dog TaoV1.01. 完成了文档的撰写。2023.08.04Dog TaoV1.21. 修订文档&#xff0c;增加了Modbus协议简介小节。 本文档提供ModbusPoll调试软件与官方部署文档合辑资源&#xff08;CSDN平台&#xff09;。 文章目录 Modbus协议简介发展历史主要技…...

EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?

目录 1 EXCEL里如何显示序号&#xff1f; 2 如何重新排序&#xff1f; 3 怎么取得排序后的序号&#xff1f; 3.1 rank() 的序号可能不连续 3.2 方法2&#xff1a;SUMPRODUCT((C7>C$7:C$12)/COUNTIF(C$7:C$12,C$7:C$12))1 EXCEL里如何显示序号&#xff1f;如何重新排序…...

kubernetes 集群利用 efk 收集容器日志

文章目录 [toc]前情提要制作 centos 基础镜像准备 efk 二进制文件部署 efk 组件配置 namespace配置 gfs 的 endpoints配置 pv 和 pvc部署 elasticsearchefk-cmefk-svcefk-sts 部署 filebeatfilebeat-cmfilebeat-ds 部署 kibanakibana-cmkibana-svckibana-dp使用 nodeport 访问 …...

安防视频监控汇聚平台EasyCVR在移动端火狐浏览器中云台显示的优化

安防监控视频EasyCVR视频融合平台基于云边端一体化架构&#xff0c;具有强大的数据接入、视频监控汇聚、处理及分发能力&#xff0c;平台能对前端接入设备进行统一集中管理&#xff0c;支持采用设备树对设备进行分组、分级管理&#xff0c;支持设备状态监测、云端运维等功能&am…...

selenium官文文档阅读总结(day 3)

1.关联型xpath的用法 driver.find_element(By.XPATH,//a[text()"xxx"]/ancestor::祖先元素的标签名//……) 2.selenium等待 等待的作用 &#xff1a;在系统运行的过程中&#xff0c;等待网页内容的加载显示。需要耗费的时间&#xff0c;与网络速度、接口的复杂程度…...

【pandas百炼成钢】数据预览与预处理

知识目录 前言一、数据查看1 - 查看数据维度2 - 随机查看5条数据3 - 查看数据前后5行4 - 查看数据基本信息5 - 查看数据统计信息&#xff5c;数值6 - 查看数据统计信息&#xff5c;非数值7 - 查看数据统计信息&#xff5c;整体 二、缺失值处理8 - 计算缺失值&#xff5c;总计9 …...

怎么查到企业的供应商和客户?

企业的供应商和客户是什么&#xff1f; 其实不需要过多介绍&#xff0c;我们对供应商和客户都有自己的理解&#xff0c;供应商就是负责企业产品的供应&#xff0c;企业从供应商那里买材料进行加工得到的产品&#xff0c;卖给客户。 官方来说供应商是向企业和竞争对手提供各种…...

智能物流千人俱乐部---行业必备神器

千人俱乐部前两天正式推出了。 智能物流千人俱乐部详情 很多行业内的甲方和乙方的朋友过来问&#xff0c;这个千人俱乐部到底怎么玩&#xff1f;今天再来解释一下。 1、为什么搞这个千人俱乐部&#xff1f; 一个原因是&#xff1a;研习社天天都有甲方粉丝让推荐设备厂家&#x…...

uniapp uview文件上传的文件不是文件流,该如何处理?用了uni.chooseImage预览功能要如何做

在使用uniapp开发&#xff0c;运用的ui是用uview&#xff0c;这边需要做一个身份认证&#xff0c;如下图 使用的是uview的u-upload组件&#xff0c;可是这个组件传给后端的不是文件流 后端接口需要的是文件流格式&#xff0c;后面使用了uniapp的选择图片或者拍照的api&#x…...

pktgen-dpdk arm编译问题 “Platform must be built with RTE_FORCE_INTRINSICS“

编译报错 /usr/include/rte_atomic_32.h:9:4: error: #error Platform must be built with RTE_FORCE_INTRINSICS解决办法&#xff1a; 我是在 arm架构服务器上编译出现这个&#xff0c;要定义 RTE_FORCE_INTRINSICS 在meson.build中 增加gcc编译参数 add_project_arguments(…...

用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格

如果我们在输入附件说明时在“附件&#xff1a;”之间加入空格&#xff0c;那么排版时就要删除这些空格。 因为string对象replace()支持正则表达式&#xff0c;于是考虑用replace()来完成。 写了一段只有一个多余空格的代码来测试&#xff1a; <!DOCTYPE HTML> <HT…...

容器技术:Docker搭建(通俗易懂)

目录 Docker搭建环境准备Docker安装1、查看服务器是否安装Docker2、卸载Docker3、安装Dokcer依赖环境4、配置Docker国内阿里云镜像5、安装Docker6、查看Docker信息7、配置阿里云镜像加速8、镜像安装10、运行实例11、查看实例状态12、测试 Docker命令集合 Docker搭建 环境准备 …...

Day 16 C++ 友元(friend)

目录 什么是友元&#xff08;friend&#xff09; 友元的三种实现 全局函数做友元 类做友元 成员函数做友元 什么是友元&#xff08;friend&#xff09; 友元是一种访问控制的机制&#xff0c;它允许一个类或函数访问另一个类的私有成员。通过友元关系&#xff0c;可以在需要…...

步进电机1

引脚说明&#xff1a; VCC&#xff1a;电源输入口 DC:9-42VDC&#xff1a;电源的取值范围 AB组&#xff1a;用于连接电机的四条线 STEP&PUL&#xff1a;脉冲信号接口&#xff0c;用于控制速度。无细分的情况下一个脉冲步进电机走一步。 DIR&#xff1a;方向信号接口&#x…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...