Something about Mutex

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
最近打开内核Mutex debug选项,出现一些Mutex Warning,重新审查和学习了一点东西,记录一下。
目前在学习SMP相关的东西,已经开始,坚持!

一.Mutex Slowpath & Fastpath

1. Can someone help me to understand what is the difference between
> >> > fastpath
> >> > lock and slowpath lock?
> >>
> >> The fastpath is taken when nobody else is holding the lock (so the
> >> caller acquires the mutex without blocking).
> >>
> >> The slowpath is taken when somebody else is holding the lock and the
> >> caller needs to block (i.e. sleep) until the mutex is released.
> >>
> > Thanks David.
> > Could you give a bit more idea on the "How this reduce the register
> pressure
> > on fast path"
> The code for the slowpath is considerably more complex than the code
> for the fastpath. So the fastpath will need much fewer registers.
> Since the compiler needs to generate save/restore operations for many
> touched registers, by having the slow path in a separate function, the
> extra save/restores are only done if they're needed.
> The fastpath does the minimal amount required, so fewer registers will
> be required and less saving/restoring needs to be done.

二.Mutex Info:

1.Debug-mutex.c

check if the lock is created and unlocked by the owner.Only the owner can unlock the mutex.
Multiple unlocks are not permitted.That is to say that if kernel has the warning about the lock magic,the lock had been unlocked twice or more.
So you must check the use of unlock.
 
Mutexes may not be used in hardware or software interrupt contexts such as tasklets and timers.

 

2. mutex info:

 * Simple, straightforward mutexes with strict semantics:
 *
 * - only one task can hold the mutex at a time
 * - only the owner can unlock the mutex
 * - multiple unlocks are not permitted
 * - recursive locking is not permitted
 * - a mutex object must be initialized via the API
 * - a mutex object must not be initialized via memset or copying
 * - task may not exit with mutex held
 * - memory areas where held locks reside must not be freed
 * - held mutexes must not be reinitialized
 * - mutexes may not be used in hardware or software interrupt
 *   contexts such as tasklets and timers
 *
 * These semantics are fully enforced when DEBUG_MUTEXES is
 * enabled. Furthermore, besides enforcing the above rules, the mutex
 * debugging code also implements a number of additional features
 * that make lock debugging easier and faster:
 *
 * - uses symbolic names of mutexes, whenever they are printed in debug output
 * - point-of-acquire tracking, symbolic lookup of function names
 * - list of all locks held in the system, printout of them
 * - owner tracking
 * - detects self-recursing locks and prints out all relevant info
 * - detects multi-task circular deadlocks and prints out all affected
 *   locks and tasks (and only those tasks)
 */

 

 

 

 
C++11 std::thread 深度解析:从基础用法到线程池实战 并发编程是现代软件开发的核心技术之一,旨在通过同时执行多个任务来提升程序性能与响应能力。其基本原理在于利用操作系统提供的线程机制,将任务分解为可并行执行的单元。在C++中,自C++11标准引入的 `std::thread` 库为多线程编程提供了标准化的支持,其技术价值在于简化了线程的创建与管理,使开发者能够更高效地利用多核处理器资源。典型的应用场景包括高性能服务器开发、游戏引擎、并行数据处理以及科学计算等需要大量计算或高并发的领域。本文将聚焦于 `std::thread` 的核心机制,深入探讨其生命周期管理 阅读详情

相关推荐

C++20并发编程新特性解析:从jthread到协程的现代化实践

并发编程是现代软件开发中提升性能的核心技术,它允许多个任务同时执行以充分利用多核处理器资源。其基本原理是通过线程、进程或协程实现任务并行,关键技术包括同步原语、内存模型和异步编程。在C++领域,C++20标准引入了一系列现代化并发工具,如std::jthread、信号量、闩锁和屏障,这些特性显著提升了代码的安全性和可维护性。这些工具特别适用于高性能计算、服务器后端、游戏引擎和实时系统等场景,帮助开发者构建更健壮的并发应用。本文聚焦于C++20的std::jthread和协程等新特性,通过具体示例展示如何实现

weixin_30847865的博客 441

图文并茂Mutex性能问题解析

图文并茂Mutex性能问题解析,理解Mutex的机制,对于理解共享池的争用,意义巨大

VLA-2025-03:GR00T N1【骨架:Eagle-2;端到端双系统VLA:S2 VLM+S1 DiT+FM;数据:单/双臂+人形,机器人+人类+仿真+神经共592.9M帧/8375.7小时】

通用机器人需要多功能的躯体和智能的头脑。近年来,人形机器人的发展在构建人类世界中通用自主性的硬件平台方面展现出巨大潜力。一个基于海量多样化数据源训练的机器人基础模型,对于使机器人能够推理新情况、稳健应对现实世界的多变性以及快速学习新任务至关重要。为此,我们推出了GR00T N1,一个面向人形机器人的开放基础模型。GR00T N1是一个具有双系统架构的视觉‑语言‑动作(VLA)模型。视觉语言模块(系统2)通过视觉和语言指令来解读环境。随后的扩散Transformer模块(系统1)实时生成流畅的电机动作。

u013250861的博客 173

Linux内核进程管理子系统有什么第七十九回 —— 进程调度(6)

Linux内核进程管理子系统有什么第七十九回 —— 进程调度(6)

phmatthaus的专栏 707

Linux内核:进程管理——互斥锁

互斥锁实现了“互相排斥”(mutual exclusion)同步的简单形式,所以名为互斥锁。互斥锁禁止多个进程同时进入受保护的代码“临界区”(critical section)。因此,在任意时刻,只有一个进程被允许进入这样的代码保护区。mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。

m0_74282605的博客 4337

Linux中的 mutex [二] —— 乐观自旋机制

本文基于 5.4.86 版本内核 mutex可视作是 spinlock 的可睡眠版本,同样是线程无法继续向前执行,但 spinlock 是"spin",导致该 CPU 上无法发生线程切换,而 mutex 是"block"(我们通常翻译成「阻塞」),可以发生线程切换,让所在 CPU 上的其他线程继续执行。阻塞既可以发生在线程试图获取 mutex 时,也可以发生在线程持有 mutex 时。 现在的 mutex 机制,要从这几方面纬度理解: optimistic spin 机制 osq lock 机制(见前.

http://lotte-bai.github.io/ 1426

std::mutex 性能_意见:性能测试

std::mutex 性能 对应用程序进行性能调整既耗时又昂贵。 有用的测试通常需要专用的硬件才能运行。 准备基础工作并编写运行所需的各种固定装置是专业且耗时的,其唯一的好处是可以防止您甚至不知道会发生的生产问题。 定型情景和结果 这是我遇到的一些定型观念: 一个功能版本包含一个新功能,该功能未经(甚至无法测试)经过充分测试,从一开始就存在主要的性能问题。 对现有代码的更改(可...

danpu0978的博客 940

CANN/hixl C++通用编码规范

> **Applicable Scope**: The general programming specifications apply to all C++ code. ## Rule List | Rule No. | Rule Name | Category | |---------|---------|------| | 1.1 | Validate external data le

gitblog_00886的博客 1147

OS37.【Linux】简单理解EXT2文件系统(2)

浅析了EXT2文件系统的核心机制。首先介绍了i_block数组的三级索引结构,推导出单个文件最大存储容量的计算方法;其次详细阐述了inode和block位图的管理机制,解释了删除文件时仅需修改位图而无需清空数据块的原理。文章还分析了文件系统"满"的三种情况,并重点讲解了超级块和组描述符的关键作用。在文件操作层面,系统性地揭示了新建、删除、查找和修改文件时内核的底层处理流程,特别强调了目录作为特殊文件的实现方式及其inode查找机制。最后,针对文件访问效率问题,介绍了EXT

zhangcoder的博客 记录学习轨迹~ 893

【Linux驱动开发】文件、驱动、设备模型

意思是就,在用户看来,所以在Linux操作系统的操作都可以归结为对某一个文件的操作,因此,我们的设备和驱动,最终也会变成一个或多个文件,像用户提供可以操作的接口,而对硬件的操作最终都会映射成某一种文件操作,比如“打开文件”、“读文件”、“写文件”、“文件读写控制”、“关闭文件”等等。这是个非常复杂的数据结构,事实上,这是在Linux内核发展过程中,为了支持不断增加的功能,才变得这么复杂的,我们学习的时候,并不用一下子就了解这些属性是用来干什么的,在需要使用的时候,再去了解即可。

tiumoyang的博客 201

Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类

前言 Android应用的UI显示到Display的过程中,SurfaceFlinger扮演的角色只是“Flinger”,就是定于检查Layer更新,然后计算DirtyRegion,然后将结果推送给底层显示驱动进行显示。 应用层把UI内容 写入到GraphicBuffer,SurfaceFlinger读取数据后 ,合成显示。BufferQueue 是用来管理GraphicBuffer的 一、生产者消费者模型 对GraphicBuffer的管理 使用的是生产者消费者模型,app 产生数据,通知SurfaceF

薛瑄的博客 7649

基于GD32F350K8平台、freeRTOS系统的freeRTOS移植程序设计-queue.c

**/#endif* zero. */#else#endif/**/union} u;#endif#endif#endif} xQUEUE;/**//**//**//*

myron6688的博客 22

工作日志记录

记录工作中细碎的感悟和经验,持续补充中。

WSTONECH的博客 489

一文读懂 Android FFmpeg 视频解码过程与实战分析

概述 本文首先以 FFmpeg 视频解码为主题,主要介绍了 FFmpeg 进行解码视频时的主要流程、基本原理;其次,文章还讲述了与 FFmpeg 视频解码有关的简单应用,包括如何在原有的 FFmpeg 视频解码的基础上按照一定时间轴顺序播放视频、如何在播放视频时加入 seek 的逻辑;除此之外,文章重点介绍了解码视频时可能容易遗漏的细节,最后是简单地阐述了下如何封装一个具有基本的视频解码功能的 VideoDecoder。 前言 FFmpeg FFmpeg 是一套可以用来录制、转换数字音频、视频,并能将其转化

Android23333的博客 618

MYSQL SQL 执行系列2

-> open_and_process_table (为 Table_ref 获取 MDL 锁并打开表或视图)|-> open_table (对于基表)-> open_table (对于基表)所以open_table是真正打开一个的地方(视图、派生表、临时表有其他处理函数)。是 MySQL 服务器中的核心分发函数。它接收已经解析并填充好的LEX结构(语法树),根据的值(如等),调用相应的内部处理函数完成实际的数据操作、元数据变更或管理命令。该函数位于之后,是查询执行流程的最终入口。

Piemon&Anokata的博客 269

hackthebox靶场记录(Cap、Connected、Reactor、Facts、WingData、Orion)

HTB靶场:Cap、Connected、Reactor、Facts、WingData、Orion,待更新

qq_43292831的博客 650

【一文读懂】《Effective STL》50条有效使用STL的经验

本文按 Scott Meyers《Effective STL》(2001)原书 8 章顺序,系统梳理全部 50 条条款,覆盖容器选型、vector/string、关联容器、迭代器、算法、函数子、STL 实战与其他议题。对初学者易混淆处配代码示例,并在关键处标注 C++11/20 的现代等价写法(如 unordered_map、std::erase_if、lambda 取代 bind1st)。

码工许师傅 353

BUG_ON && WARN_ON

BUG_ON && WARN_ON一.BUG_ONLinux中BUG_ON,WARN_ON用于调试,比如14 #define BUG_ON(condition) do { / 15         if (unlikely((condition)!=0)) / 16                 BUG(); / 17 } while(0)如果觉得该condition

Am_111的专栏 6934
上一篇: linux中断 下半部
下一篇: 《unix systems for modern architectures》笔记---SMP和锁(一)
Am_111
博客等级 码龄16年 67粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值