真正的上锁前,为何要调用pr…

读懂合并PR:从GitHub高质量Pull Request中学习代码设计与工程实践 在开源协作中,Pull Request是代码变更的核心载体,而合并(Merged)的PR更记录了从问题定位、方案讨论到最终落地的完整决策链路。与直接阅读源码相比,合并PR保留了被否定的思路、维护者的审查意见以及测试演进的轨迹,是理解大型项目设计逻辑的高效素材。通过筛选GitHub上标注为merged、performance、bug或comments较多的PR,开发者可以按“描述—文件变更—核心diff—评论—测试”的顺序拆解,从而掌握缓存、并发、接口抽象等通用工程问题的解决范式。从Vue.js、Redis到 阅读详情

static inline void raw_spin_lock(raw_spinlock_t *lock)
{
     preempt_disable();
     do_raw_spin_lock(lock);
}

在真正的上锁前,为何要调用preempt_disable()来关闭抢占?

==》
1.如果内核可抢占, 单CPU
    process1通过系统调用进入内核态,如果其需要访问临界区,则在进入临界区前获得锁,上锁,V=1,然后进入临界区
    如果process1在内核态执行临界区代码的过程中发生了一个外部中断,当中断处理函数返回时,因为内核的可抢占性,此时将会出现一个调度点,如果CPU的运行队列中出现了一个比当前被中断进程process1优先级更高的进程process2,那么被中断的进程将会被换出处理器,即便此时它正运行于内核态。
    如果process2也通过系统调用进入内核态,且要访问相同的临界区,则会形成死锁(因为拥有锁的Process1永没有机会再运行从而释放锁)
    
2.如果内核可抢占,多CPU
    CPU1上的process1通过系统调用进入内核态,如果其需要访问临界区,则在进入临界区前获得锁,上锁,V=1,然后进入临界区
     如果process1在内核态执行临界区代码的过程中发生了一个外部中断,当中断处理函数返回时,因为内核的可抢占性,此时将会出现一个调度点,如果CPU1的运行队列中出现了一个比当前被中断进程process1优先级更高的进程process2,那么被中断的进程process1将会被换出处理器,即便此时它正运行于内核态。
    如果CPU2上的process3也通过系统调用进入内核态,且要访问相同的临界区,也一样形成死锁
    

为了防止系统进入死锁状态,需要在真正上锁前,调用preempt_disable()来关闭抢占
Ceph 撸源码系列(二):Ceph源代码里的那些锁 std::mutex(2 of 3) 一、前言: Nautilus v14.2.4 里有一个Performance PRmsg/async: avoid put message within write_lock #20731 ,这个PR主要是把 for 循环里的m->put()的代码放到锁之外,来减少临界区里的代码,以提高performance。 注:这个PR里由于要把put()代码分开,新增了Message *数组,用... 阅读详情

相关推荐

Linux: lock: preempt_disable; CONFIG_PREEMPT_COUNT;CONFIG_PREEMPT

摘要:本文分析了Linux内核中的preempt_disable()函数,指出其当前实现仅作为编译器屏障(barrier)使用,已失去原有的抢占禁用功能。文章追溯了相关commit历史,解释了在UP(单处理器)和非抢占内核中,该函数仅需保证编译器不重排代码顺序。同时介绍了配置选项PREEMPT的作用,它通过允许内核代码被抢占来降低延迟,适用于桌面和嵌入式系统。最后阐述了preempt_disable/enable的正确使用场景,包括保护关键代码段、实现原子操作等,并给出了工作队列中的实际应用示例。

mzhan017的博客 655

preempt_disable宏

1.相关数据结构及函数如下: struct thread_info中 { unisgned int preempt_count;//线程抢占引用计数器,为0才能被抢占 } 2.preempt_disable的定义 #define preempt_disable() \ do{ \ inc_preempt_count(); \//增加preempt_cou...

hzj_001的博客 2926

NVIDIA DRIVE SDK学习(二)——NvMedia

可以通过使用NvSciBuf API通过NvMedia Tensor属性分配NvSciBuf来创建NvMedia张量。由于NvSciBuf API有助于NvMedia和NVIDIA®CUDA®之间的数据共享,这使得分配的张量可以在NvSciBuf API允许的情况下重复使用。它支持图像聚合操作。NvSciSync组件使得NvMedia组件可以与其他组件保持同步,比如CUDA组件、基于NvSciSync的组件等。立体视差模式:在这种模式下,该模块通过左图像和右图像来产生立体视差,从而进行物体深度测量。

weixin_39592381的博客 3044

竞争_LOCK

spin_lock VS spin_lock_irqsave   他们两者只有一个差别:是否调用local_irq_disable()函数, 即是否禁止本地中断。在任何情况下使用spin_lock_irq都是安全的。因为它既禁止本地中断,又禁止内核抢占。spin_lock比spin_lock_irq速度快,但是它并不是任何情况下都是安全的。举个例子:进程A中调用了spin_lock(&lock

Free Bar 807

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7991

银河麒麟V10系统下,手把手解决Ollama安装报错‘GLIBCXX_3.4.25 not found’

本文详细介绍了在银河麒麟V10系统下解决Ollama安装报错‘GLIBCXX_3.4.25 not found’的实战指南。通过隔离编译新版libstdc++、环境变量引导和服务化封装等安全方案,确保在不破坏系统稳定性的前提下顺利运行Ollama,适用于国产操作系统与AI工具的兼容性需求。

weixin_42556197的博客 483

preempt_enable和preempt_disable

在执行系统调用陷入内核之后,这些内核代码所使用的栈并不是原先进程用户空间中的栈,而是一个单独内核空间的栈,这个称作进程内核栈。这个宏的定义通常会使用一些特殊的内存屏障或者优化指令,以确保在多线程或者多核环境下读取变量的值是正确的,避免出现意外的优化问题。当进程在内核态运行的时候,栈顶指针总是指向这块申请的内核栈中的某一个区域,内核栈的大小最大也就8K,所以将当前栈顶指针的低12位置零就可以得到内核栈的基址。这是因为,内核栈在申请的时候,总是 8K 对齐的,也就是说地址的低12位肯定为0。

suyanqiangqq的博客 937

SAP PP实战:MRP Area怎么用?手把手教你按产线、委外供应商拆分物料计划

本文详细解析了SAP PP模块中MRP Area的功能与应用,指导如何按产线、委外供应商拆分物料计划,实现精细化物料需求管理。通过实战案例展示MRP Area在减少计划冲突、提升库存准确率方面的显著效果,为制造业企业提供可落地的解决方案。

weixin_27015733的博客 432

关于preempt_enable 和 preempt_disable

关于preempt_enable 和 preempt_disable 允许抢占和禁止抢占。 例如:内核态程序 和 中断处理程序的互斥 因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。 load %r0, counter add %r0,1 //发生

星星之火,可以燎原!...... 6133

一、永磁同步电机矢量控制——电机数学模型

本文介绍了永磁同步电机(PMSM)的数学模型构建方法,重点分析了不同坐标系(三相静止、α-β静止、d-q旋转)下的电压方程、磁链表达式及电磁转矩计算方法。通过Clark和Park变换简化非线性耦合系统,推导了表贴式(SPMSM)与内置式(IPMSM)电机的电压方程差异,并给出α-β和d-q坐标系下的转矩公式,强调磁链与电流的正交性对转矩的影响。全文基于理想假设,为后续电机控制算法(如FOC、DTC)提供理论基础。

惊鸿一现 1927

华为交换机与思科/华三设备LACP对接实战:手把手教你配置链路聚合

本文详细解析了华为交换机与思科、华三设备间的LACP链路聚合配置实战,涵盖核心原理、配置步骤及排错技巧。通过对比不同厂商的实现差异,提供可落地的跨厂商对接方案,助力企业网络工程师高效部署高可靠性链路聚合。

weixin_30836759的博客 422

开源贡献全流程:从Fork到PR的实战指南

开源协作是现代软件开发的重要模式,其核心在于通过分布式版本控制系统实现多人协同编码。Git作为目前最主流的版本控制工具,提供了fork、clone、branch等基础操作来支持开源贡献流程。理解这些技术原理不仅能提升团队协作效率,更是参与Apache、Linux等顶级开源项目的基础能力。在实际工程实践中,开发者需要特别注意代码规范、提交信息格式和PR描述等细节,这些往往是新手贡献被拒的主要原因。通过标准化的工作流(如GitHub Flow)和工具链(如ESLint、Husky),可以有效规避90%的常见问题

weixin_30765505的博客 425

借助生成式 AI 加快创作速度,通过快速构建 Omniverse 扩展程序,您可以直接在 USD Composer 中连接首选的生成式 AI 智能体并与之交互。或者,您也可以使用由 LLM 提供支持的

通过快速构建 Omniverse 扩展程序,您可以直接在 USD Composer 中连接首选的生成式 AI 智能体并与之交互。或者,您也可以使用由 LLM 提供支持的 OpenUSD 开发方法,为您的工作流程提供强劲助力。

pvmsmfchcs的博客 683

调度器开锁上锁

给调度器上锁函数OSSchedlock()(程序清单L3.9)用于禁止任务调度,直到任务完成后调用给调度器开锁函数OSSchedUnlock()为止,(程序清单L3.10)。调用OSSchedlock()的任务保持对CPU的控制权,尽管有个优先级更高的任务进入了就绪态。然而,此时中断是可以被识别的,中断服务也能得到(假设中断是开着的)。OSSchedlock()和OSSchedUnlock()必须

u011910350的博客 462

一文读懂 SAP ERP / SAP S/4HANA 里的 Price List:概念、配置、定价流程与可运行 ABAP 示例

SAP ERP/S4HANA中的Price List解析 本文系统阐述了SAP定价体系中Price List的核心概念和实现机制。Price List并非独立的价目表,而是通过条件技术(条件类型、访问序列、条件记录)与Price List Type(PLTYP)共同作用的定价维度。文章详细说明了: Price List本质上是客户主数据中的PLTYP字段,作为定价查找键使用 定价流程中条件访问序列如何利用PLTYP查找特定价格 S4HANA与ECC版本在价格维护入口的差异 实际业务中如何通过不同PLTYP实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 660

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

高手进阶(六):PR还在人工审?何不把Claude Code作为一个可调用的组件?Claude Code流水线开箱即用

Claude code的新形态,作为组件嵌入流水线。还在手动审查每个 PR?本文给出 Claude Code 嵌入 CI/CD 的三套 YAML(审查/测试/安全扫描),text/json/stream-json 三种输出格式解析,--max-turns + --allowedTools + managed-settings.json 企业级安全控制,附 GitLab CI、Jenkins 适配模板与 Routines vs CI/CD 决策树。

weixin_63132747的博客 572

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

并联逆变器环流抑制:准PR调节器伪代码与DSP实现要点

逆变器并联是提升系统容量的常用技术方案,但多台设备并联运行时,因瞬态电压差异和低阻抗回路产生的环流,会导致发热不均、过流误报等问题。环流抑制的核心在于对零序电流进行闭环控制,而准PR调节器能对50Hz、150Hz等特定频次分量实现无静差跟踪,是工程中广泛采用的控制算法。本文将围绕环流形成机理、载波同步补偿、离散化实现和参数整定展开,并结合储能PCS、UPS等场景,给出可直接改写成C语言的伪代码骨架及调试避坑指南,适合电力电子控制工程师参考。

weixin_29168675的博客 238

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

给调度器上锁和开锁(Locking and UnLocking the Scheduler)

给调度器上锁函数OSSchedlock()(程序清单L3.9)用于禁止任务调度,直到任务完成后调用给调度器开锁函数OSSchedUnlock()为止,(程序清单L3.10)。调用OSSchedlock()的任务保持对CPU的控制权,尽管有个优先级更高的任务进入了就绪态。然而,此时中断是可以被识别的,中断服务也能得到(假设中断是开着的)。OSSchedlock()和OSSchedUnlock()必须

FunkyFrog821951259的博客 2741

版本上锁:为什么我不再盲目升级开发工具

软件工程的稳定运行,离不开对变更的精细控制。开发工具、框架与依赖库的升级,本质是一次变更管理,其核心并非拒绝变化,而是让变化可预期、可回滚。现实中,无论是系统底层的OpenSSH升级,还是智能终端的OTA升级,乃至页面升级访问机制,都可能因环境漂移或兼容性缺口引入隐性故障。盲目追新会带来时间、风险与数据的三重成本,因此合理的策略是默认锁定、按需解锁。通过锁定运行时版本、精确化依赖管理、固化构建环境,并配合紧急升级与定期评估日历,开发者能在享受必要安全修复与新特性的同时,最大程度降低升级对生产稳定性的冲击。本

weixin_33901641的博客 326

generative-ai-for-beginners 贡献指南全解:PR 规范、链接追踪规则与 Markdown 自动化校验工作流

本文基于 [CONTRIBUTING.md](https://link.gitcode.com/i/c872cba601f3bb401bb31b87457c829a) 系统讲解 generative-ai-for-beginners(21 课生成式 AI 入门课程)仓库的社区贡献规范:从 CLA 签署、翻译政策、Pull Request 拆分原则,到文档撰写的链接与图片硬性规则,并结合 [.git

gitblog_00429的博客 487

不是破解,是上锁:IDM Activation Script 把 30 天试用期永远冻结在第一天

IDM Activation Script(IAS)是一个完全开源的 Windows 脚本,它用注册表权限锁定的方式,让 Internet Download Manager 的 30 天试用期永久停表。这篇文章会带你从"还剩 3 天"的焦虑,一路走到"再也不看剩余天数"的踏实,全程不用动 IDM 的一个程序文件。 ## 那个让所有人都想摔键盘的下午 先别急着记命令,我想先讲一个场景,你多半经历

gitblog_00831的博客 758

Pr_cc 学习笔记(九)画中画

(一) 所谓画中画,就是一个图层覆盖另一个图层 将一个视频段放到初始轨道上,再拖一段素材放到它上面的轨道上 如图 这时候就发现挡住了上面的素材在这个时间线上成为了最上面的图层 离开了上面视频的存在周期之后,便只显示下面的图层,如图  这时候,如果想调整最上面图层的比例啊,大小,位置啥的。就要用到效果控件 (二) 可以设置多个图层,按住了Alt拖动视频可以实现移动复制。在...

东曜说 1815

“Another git process seems to be running in this repository...”Git此问题解决

Git中显示:Another git process seems to be running in this repository, e.g.an editor opened by 'git commit'. Please make sure all processesare terminated then try again. If it still fails, a git process m...

weixin_30687587的博客 321

uC/OS-II系统学习笔记(5)—— uC/OS-II概述下篇

任务的调度器,系统占用的空闲任务和统计任务,系统的初始化和多任务的启动

dehui1012的博客 1989
上一篇: 深入分析Linux自旋锁
下一篇: 内核抢占
wakeupwakeup
博客等级 码龄11年 9粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值