news 2026/10/16 3:08:06

C++互斥锁学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++互斥锁学习

使用目的:保护共享资源,防止多线程并发读写造成数据错乱

基础概念:

临界区:多线程会访问共享变量的那段代码

竞态:多个线程并发访问共享数据,至少有一个线程是写操作;最终结果取决于线程调度的先后顺序,结果不确定

锁的作用:保证同一时刻最多只有一个线程进入临界区

互斥锁:

解释:互斥就是互相排斥,保证同时最多一个线程进入临界区

基础原型:

#include <mutex> std::mutex mtx; // 创建一把互斥锁对象

原始成员函数:

mtx.lock():加锁

如果锁空闲 ->拿到锁,往下执行

如果锁已被别的线程持有 ->当前线程阻塞,原地等待直到锁被释放

mtx.unlock():解锁

释放锁,让其他等待这个锁的线程有机会获取

注意:不推荐直接手写lock() unlock():

// 危险写法! mtx.lock(); // 临界区代码,如果这里抛异常,unlock不会执行!锁永远不会释放,死锁! mtx.unlock();

C++提供 RAII 包装器:lock_guard/unique_lock自动解锁

lock_guard:

{ // 构造的时候自动调用 lock() std::lock_guard<std::mutex> lock(mtx); // =========临界区开始======== // 只有拿到锁的线程才能执行这里 // 读写共享变量 // =========临界区结束======== } // 离开大括号,lock对象析构,自动调用 unlock()

特点:

1.构造上锁,析构解锁,安全

2.不能手动解锁,锁的生命周期和大括号绑定

unique_lock:

std::unique_lock<std::mutex> lk(mtx); lk.unlock(); // 支持手动提前释放锁 // ... lk.lock(); // 可以再次上锁

特点:

1.不强制需要大括号,锁被销毁后自动解锁

2.支持手动解锁,延迟加锁,尝试加锁

3.条件变量condition_variable使用必须搭配unique_lock

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 3:08:04

第 6 篇 IOMMU 的基本职能:地址翻译与设备隔离

本文属于第二册“IOMMU&#xff1a;地址翻译与隔离的硬件机制及内核管理”&#xff0c;回答第 0 篇提出的问题 6&#xff1a;IOMMU 如何同时解决物理连续性、寻址范围与设备隔离三个问题&#xff1f;其内部的地址翻译过程是怎样的&#xff1f; 第 5 篇第 6 节指出&#xff0c;…

作者头像 李华
网站建设 2026/10/16 3:07:23

Halcon 数组操作(Tuple)详解与算子说明

Halcon 数组操作(Tuple)详解与算子说明 适用版本:Halcon 17.12(算子名、签名、默认值、取值范围均严格对照本地官方文档 D:/Soft/WorkSoft/Halcon17/doc/html/reference/operators/) 本文档覆盖 Halcon 17.12 Tuple / 数组操作全部 121 个官方算子,共 13 个官方分类。 一…

作者头像 李华
网站建设 2026/10/16 3:06:01

Git本地开发操作指南

目录 一&#xff0c;预备 1.1 Git 介绍 1.2 Git 下载安装 二&#xff0c;Git基本操作 2.1 创建并配置本地仓库 2.2 工作区、暂存区、版本库 2.3 添加文件 2.4 修改文件 2.5 版本回退 2.6 撤销修改 2.7 删除文件 三&#xff0c;分支管理 3.1 关于分支 3.2 分支操作…

作者头像 李华
网站建设 2026/10/16 3:05:15

LangChain Agent 入门:ReAct 循环到底在跑什么

个人主页&#xff1a;> for_ever_love__ <&#xff08;欢迎各位大佬莅临&#x1f60a;&#xff09; 其他栏目: > 大模型开发从0到1 < 其他栏目: > iOS项目总结大全 < 其他栏目: > 我想学python了 < 其他栏目: > iOS UI < 文章目录LangChain Agen…

作者头像 李华
网站建设 2026/10/16 3:04:46

品牌名称语义挖掘的Prompt工程:四维拆解、四类资产与排他性双重检验

一、问题定义 LLM为白酒品类生成slogan时&#xff0c;默认检索的是品类功能词表——水源、窖龄、工艺、大师。这套词表已经被数十万个白酒SKU穷尽&#xff0c;输出必然同质化。 名称语义是差异化剩余区&#xff1a;名字里的字义、词源、谐音、典故&#xff0c;天然私有&#xf…

作者头像 李华