自旋锁在单处理器环境是无效的理解

Android车载应用开发与分析(11)- 车载Android应用开发入门指南 将时间回退到2017年我大学刚毕业时,彼时移动互联网就已经开始退潮,各大个培训机构也纷纷停止了Android相关的培训,曾经热火朝天的应用开发从那时起,就开始走向下坡路,小程序以及众多跨平台框架也让市场对Android原生开发的需求逐年降低,市场需求的降低也造就了Android开发的面试变得史无前例的“卷”。 终于我在2019年选择离开了互联网,投身当时还不是非常火热的车载Android领域继续从事Android原生开发。而这一年中国首个外商独资的整车制造项目,“... 阅读详情

单处理器环境不需要自旋锁,调用了自旋锁的函数,里面也不是自旋锁的实现,只不过是用了层壳而已

原因是:

如果是非抢占的系统:(高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。)

一个进程(进入到了内核态),或者线程用了自旋锁,没有执行完毕之前,没有别的进程或者内核线程跟他抢,即使是时间片到了之 后,接着还是分给本进程或者线程。

如果是软中断或者是中断打断了怎么办? 没关系,关中断即可。也就是说,这时自旋锁退化成关开中断


如果是抢占的系统:(即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。)

自旋锁的定义变成非抢占即可,这时高优先级进程就没法跟他抢了。中断是一样的处理。


总之,单处理器来说,非抢占的话,自旋锁退化为 关开中断;

对于抢占来说,自旋锁变成  禁止/打开抢占+关开中断

Benchmark系列——UnixBench测试项深度解析与性能优化指南 本文深度解析UnixBench基准测试套件的各项测试原理,包括Dhrystone、Whetstone、系统调用、进程管理、IPC及文件I/O等核心测试项。通过详细的测试项分析,指导用户解读测试报告,并提供针对性的内核参数调整、编译优化及系统配置实战指南,帮助用户精准定位并优化系统性能瓶颈。 阅读详情

相关推荐

BMS短路测试避坑指南:从炸管到稳定,我是如何搞定MOS管和TVS的

本文详细记录了BMS短路测试中MOS管和TVS的优化过程,从驱动电阻调整、PCB寄生参数控制到TVS选配策略,提供了一套实用的调试方法论。通过实战案例解析,帮助工程师避免常见陷阱,实现稳定可靠的短路测试性能。

weixin_30652897的博客 140

自旋锁为什么不适用于单处理器系统

自旋锁为什么不适用于单处理器系统 解释为什么自旋锁不适用于单处理器系统,但通常用于多处理器系统。 自旋锁不适合单处理器的原因是由于当一个进程处于自旋锁状态时说明其正在等待某一个资源,而在单处理器系统中,一旦发生了这种自旋锁,那么拥有资源的那个进程也会由于无法得到CPU而一直等待,这样之后,占用CPU的进程会等待另一个进程释放资源,占用资源的进程会等待另一个进程释放CPU,从而导致程序进入一个死锁的状态,因此单处理器不适合自旋锁 在多处理器中,即使一个进程处于自旋锁状态而占用一个CPU,拥有资源的进程也可以

Qlz的博客 2493

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 717

自旋锁总结

自旋锁可分为用在单核处理器上和用在多核处理器上。 单核处理器: 用在单核处理器上,又可分为两种: 1.系统不支持内核抢占 此时自旋锁什么也不做,确实也不需要做什么,因为单核处理器只有一个线程在执行,又不支持内核抢占,因此资源不可能会被其他的线程访问到。 2.系统支持内核抢占 这种情况下,自旋锁加锁仅仅是禁止了内核抢占,解锁则是启用了内核抢占。

xiaofei0859的专栏 1018

智能车竞赛疯狂电路组:Altium Designer赛道设计与计分策略全解析

本文全面解析智能车竞赛疯狂电路组中,如何利用Altium Designer进行专业赛道设计。从软件基础操作、图层管理与封装库调用,到赛道拓扑绘制、核心尺寸规范,详细拆解设计全流程。文章深入结合计分策略,指导如何在设计阶段植入策略点,优化路径与元器件布局,以在比赛中获得时间优势,并提供了从图纸输出到实地测试的完整避坑指南。

beta5的博客 586

drm 之modes

#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&...

u012794472的专栏 3718

spin_lock(自旋锁)的使用以及在单核cpu与多核cpu里面的实现区别

spinlock_t lock1; spin_lock(&lock1); … 临界区代码 … spin_unlock(&lock1); 还有其他一些自旋锁操作: spin_lock_irqsave不仅获得自旋锁,还停用本地CPU的中断,而spin_lock_bh则停用softIRQ(软中断)。用这两个操作获得的自旋锁必须用对应的接口释放,分别是spin_unlock_irqsave和spin_unlock_bh。 spin_lock的初始化 kernel/include/linux/s

木牛的博客 5561

使用openair包分析气象数据

气象数据通常是有规律的时间序列,分析气象数据时需要对空气质量测量、气象数据和扩散模型输出进行分析。openair 是用于分析空气质量数据或更广泛的大气成分数据的R软件包。该软件包广泛应用于学术界、公共和私营部门。该项目最初由英国自然环境研究委员会(NERC)资助,并由英国环境部(Defra)提供额外资金。

Christina 2520

多线程-锁的类型 && CAS 非阻塞同步

锁的类型 根据完成任务所需要的结构不同,一个应用程序可能会使用多种不同类型的锁原语,因此,开发人员必须避免在一个给定任务中混淆这些锁原语,尤其在使用第三方提供的库时需要格外小心。假设在一个应用程序中,资源R依赖于第三方提供的库,并且在该库中资源R使用L型锁作为同步原语。此时,若开发者需要在应用程序中对资源R使用锁原语,则必须也使用L而不是其他类型的锁原语。接下来的部分将介绍不同类型的锁,并详细说

Steve Sun的专栏 2920

用Playwright MCP让AI帮你完成所有浏览器自动化

Playwright MCP(Model Context Protocol)是微软基于 Playwright 框架推出的 AI 浏览器自动化新协议。它通过结构化快照数据和自然语言指令结合大型语言模型(如 GPT),实现无需编码的网页交互。无论你是要测试登录流程、抓取价格数据,还是用 AI 远程控制浏览器,Playwright MCP 都能大幅降低门槛,让“说人话”也能驱动自动化脚本。本篇将从功能介绍、技术架构、使用方法到实际场景,带你全面理解这一自动化革命。

todoitbo的博客 3万+

最大面积验证码通用解法

最大面积验证码、面积验证通用解法

九月镇灵将的博客 1044

单处理器锁机制

注意在单处理器机器上,编译的时候并不会加入自旋锁。它仅仅被当作一个设置内核抢占机制是否被启用的开关。如果禁止内核抢占,那么在编译时自旋锁会被完全剔除出内核。。...

wmzjzwlzs的专栏 235

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《深入理解Linux内核》读书笔记 第一章 绪论(2)

五、Unix内核概述: Unix内核提供了应用程序可以运行的执行环境。因此,内核必须实现一组服务及相应的接口,应用程序使用这些接口,而且通常不会与硬件资源直接交互。 进程/内核模式: 所有标准的Unix内核都仅仅利用了内核态和用户态。 一个程序执行时,大部分时间都处在用户态下,只有需要内核所提供的服务时才切换到内核态。当内核满足了用户程序的请

疯狂伯德 1380

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

内核-自旋锁

每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次值准许一个进程进入临界区,进入后不允许其他进程进入。union {将raw_spinlock结构展开,可以看到这是一个体系相关的arch_spinlock_t结构本文只关心常见的x86_64体系来说,这种情况上述结构展开为上述的结构时SMP上的定义,对于UP来说。arch_spinlock_t就是一个空结构。所以自旋锁就是一个原子变量(修改这个变量会LOCK总线,因此可以避免多个CPU同时对其进行修改)

Forever_change的博客 1093

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

同步---自旋锁

1 自旋锁的基本概念 自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图获得一个已经被使用的自旋锁,那么该线程就会一直进行自旋,等待锁重新可用。在任何时刻,自旋锁都可以防止多余一个的执行线程同时进入临界区。 Linux内核实现的自旋锁是不可递归的,如果你请求一个你已经持有的自旋锁,那么你将会自旋,等待释放这个锁,由于自旋,释放这个锁的操作不会被执行,所以会一直处于自旋忙等待中,于是就被锁死了。 自旋锁可以在中断处理程序中使用。在中断处理程序中使用自旋锁时,一定要在获取锁之前,首先禁止本地中断(当前处理

qq_41683305的博客 2135

自旋锁

 自某日看了iceboy和MJ0011关于多处理器同步的一些讨论,才发现原来我对自旋锁的理解也有一定错误,还好现在明白了~~为了加深理解,就深入分析了一下自旋锁的实现,一篇小小的自旋锁分析文章,献给大家。写得比较碎,欢迎各位大牛小牛指出错误~一、自旋锁是什么?先进行下简单科普,自旋锁是一种轻量级的多处理器间的同步机制。因此,自旋锁对于单处理器是没有实际意义的。它要求持有锁的处理

1463

【深入理解Linux内核】自旋锁

一. 信号量 信号量结构: 一个整数变量 一个等待进程的链表 两个原子方法:down() 和 up() 每个要保护的数据结构都有它自己的信号量,初始值为1. 当内核控制路径希望访问这个数据结构是,在这个信号量上执行down(),对信号量的值-1。若当前信号量的值非负,则允许访问这个数据结构。否则,把执行内核控制路径的进程添加到这个信号量的链表中并阻塞该进程。 当另一个进程在那个信号量上...

lxin_liu的博客 423

自旋锁--Test and Set Clock机制分析

自旋锁–Test and Set Clock机制分析@(OS)自旋锁:为防止多处理器并发引入的一种锁。在内核中,广泛应用于中断处理部分。而在单处理器中,防止中断处理处理中的并发简单采用关闭中断即可,在PSW中打开/关闭中断标志位,用不大自旋锁。反之,用了自旋锁机制,就不用再管开中断或者关中断。自旋锁的设计初衷是忙则等待。理解目的:为了实现保护共享资源,任何时刻只能有一个保持者。即只有一个进程可以获得

Bing's Blog 2万+

Linux内核自旋锁

一、自旋锁概念 自旋锁(spin lock)是一种对临界资源进行互斥所访问的典型手段,它是为防止多处理器并发而引入的一种锁,在内核钟大量用于中断处理部分。对于单处理器来说,防止中断钟的并发可简单采用关闭中断的方式,直接打开关闭中断不需要自旋锁。自旋锁在锁定的时候不会休眠,一直等待尝试,因此不合适进行长时间的锁保持。自旋锁要慎用,只有在内核可抢占式或SMP的情况下才会用到,自旋锁适用于锁使用者保持锁的时间比较久的情况下。 二、自旋锁的使用 Linux内核同步方法–自旋锁 Linux内核–内核自旋锁的理解

weixin_44143206的博客 2293

深入理解自旋锁:忙等背后的高效同步之道

自旋锁是 “短耗时临界区” 的最优解,它通过 “忙等” 的方式,避免了线程上下文切换的开销,在锁持有时间极短、多处理器系统的场景下,比互斥锁、读写锁更高效。它不是 “替代” 互斥锁、读写锁,而是 “补充”—— 不同的锁有不同的适用场景,没有最好的锁,只有最适合的锁。锁持有时间短,用自旋锁;锁持有时间长,用互斥锁;读多写少,用读写锁。

kin26681的博客 353

linux内核 task_struct 中自旋锁的应用

自旋锁是用于保护短的代码片段,其中只包含少量C语句,因此会很快执行完毕。大多数内核数据结构都有自身的自旋锁,在处理结构中的关键成员时,必须获得相应的自旋锁。 定义自旋锁 struct task_struct { ... /* Protection of (de-)allocation: mm, files, fs, tty, keyrings */ spinlo...

whatday的专栏 1091

自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析

自旋锁的初衷:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。 单处理器的自旋锁: 首先,自旋锁的目的如果在系统不支持内核抢占时,自旋锁的实现也是空的,因为单核只有一个线程在执行,不会有内核抢占,从而资源也不会被其他线程访问到。 其次,支持内核抢占,由...

kunkliu的博客 702

linux同步互斥,自旋锁、互斥锁区别

一句话理解同步与互斥:我等你用完厕所,我再用厕所。什么叫同步?就是条件不允许,我要等等。什么是互斥?你我早起都要用厕所,谁先抢到谁先用,中途不被打扰。 同步与互斥经常放在一起讲,是因为它们之间的关系很大,“互斥”操作可以用“同步”来实现。我“等”你用完厕所,我再用厕所。这不就是用“同步”来实现“互斥”吗?伪代码如下: void 抢厕所(void) { if(有人在用) { 我眯一会; } 用厕所; 喂,醒醒,有人用厕所吗; } 假设A、B两人早...

zailushangha的专栏 1037

原子操作,自旋锁

原子操作指的是在执行过程中不会被别的代码路径所中断的操作。 linux内核提供了一系列函数来实现内核中的原子操作,这些函数又分为两类,分别针对位和整型变量进行原子操作。它们的共同点是在任何情况下操作都是原子的,内核代码可以安全地调用它们而不被打断。位和整型变量原子操作都依赖底层CPU的原子操作实现,因此所有这些函数都与CPU的架构密切相关。 自旋锁  自旋锁  --------

typhoonzb的专栏 2159

posix多线程有感--自旋锁

转载自:http://www.csdn123.com/html/blogs/20130509/11141.htm 自旋锁是SMP架构中的一种low-level的同步机制。      当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。对于自选锁需要注意: 由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的

fox1987的专栏 807

信号量与自旋锁

信号量和自旋锁内核同步措施    为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。    Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随 Linux从单处理器到对称多处理器的过度;伴随着从非抢占内核到抢占内核的过度。锁机制越来越有效,也越来越复杂。    目前来说内核中原子操作多用来做计数使用,其它情况

zhenwenxian的专栏 1221
上一篇: 内核控制路径
下一篇: 慢慢欣赏linux PCI-PCIE初始化学习
天麓
博客等级 码龄22年 323粉丝 437原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值