Linux系统中的自旋锁(两幅图清晰说明)

news2024/11/23 21:17:35

在这里插入图片描述
在这里插入图片描述
总结:
多CPU下的自旋锁采取的是忙等待(原地打转)机制,虽然忙等待的线程占用了它所在的cpu,但其他线程仍可放到其他CPU上执行。所以自旋锁上锁和解锁之间的临界区代码要尽量的短,最好不要超过5行,否则采取忙等待的线程会浪费过多的cpu资源。

单cpu下的自旋锁采用的是睡眠机制,因为忙等待会使仅有可怜的一个cpu被其占用,而拥有自旋锁的线程得不到执行无法释放锁,会引起死锁。


关于自旋锁的一些函数接口

spin_lock函数在内核文件include\linux\spinlock.h中声明,如下表:

函数名作用
spin_lock_init(_lock)初始化自旋锁为unlock状态
void spin_lock(spinlock_t *lock)获取自旋锁(加锁),返回后肯定获得了锁
int spin_trylock(spinlock_t *lock)尝试获得自旋锁,成功获得锁则返回1,否则返回0
void spin_unlock(spinlock_t *lock)释放自旋锁,或称解锁
int spin_is_locked(spinlock_t *lock)返回自旋锁的状态,已加锁返回1,否则返回0

自旋锁的加锁、解锁函数是:spin_lockspin_unlock,还可以加上各种后缀,这表示在加锁或解锁的同时,还会做额外的事情:

后缀描述
_bh()加锁时禁止下半部(软中断),解锁时使能下半部(软中断)
_irq()加锁时禁止中断,解锁时使能中断
_irqsave/restore()加锁时禁止并中断并记录状态,解锁时恢复中断为所记录的状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】汇总数据

目录 一、聚集函数 1.AVG()参数 2.COUNT()函数 3.MAX()函数 4.MIN()函数 5.SUM()函数 二、聚集不同值 三、组合聚集函数 一、聚集函数 聚集函数:运行在行组上,计算和返回单个值的函数,用来汇总数据。 SQL聚集函数 AVG()返回某列的平…

【100天精通python】Day30:使用python操作数据库_数据库基础入门

专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 1 数据库基础知识介绍 1.1 什么是数据库? 数据库是一个结构化存储和组织数据的集合,它可以被有效地访问、管理和更新。数据库的目的是为了提供一种可靠的…

go-admin解读1goLand debug 快捷编译重启配置

** goLand debug &快捷编译重启配置 **

一文读懂ISO27701

引言 隐私暴露,大数据营销杀熟、骚扰信息不断……越来越多的数据泄露与威胁影响全球人类的安宁生活。在此背景下,各个国家、地区纷纷出台相关法律法规,对数据安全与隐私保护相关问题进行严格规范与引导。目前常见的有中国的个人信息保护法、…

Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

相关API的使用: 1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材…

[保研/考研机试] KY180 堆栈的使用 吉林大学复试上机题 C++实现

题目链接: 堆栈的使用_牛客题霸_牛客网 描述 堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。其中 push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。 输入描述: 对于…

Flink窗口分类简介及示例代码

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 1. 流式计算2. 窗口3. 窗口的分类◆ 基于时间的窗口(时间驱动)1) 滚动窗口(Tumbling Windows)2) 滑动窗口(Sliding Windows&…

发现 Kubernetes 集群受到攻击

Aqua Security 的研究团队 Aqua Nautilus 发现数百个组织的 Kubernetes 集群受到攻击。 这位云原生安全专家宣布,一项为期三个月的调查显示,属于 350 多个组织、开源项目和个人的 Kubernetes 集群可公开访问且不受保护。 一个值得注意的集群子集与大型…

交流有效值,峰值和平均值关系

1,交流有效值,峰值和平均值关系: 2,根据负载,确定变压器满载时的输出电压: 1),为了使稳压芯片MIC29302输出4V,LDO压差 0.4V,整流桥压降为1V, 则…

新品发布会上出现国风数字人?写实数字人定制技术助推品牌引领年轻消费市场潮流

在小牧优品新品发布会上推出首位国风数字人潇沐,这是为了让年轻化、时尚化品牌特质更加呈现出来,聚焦年轻消费市场的一大战略。品牌结合虚拟形象3d建模技术,打造出符合品牌专属数字人,并且结合了动作捕捉技术打破行业交流壁垒&…

深度优先搜索与动态规划|543, 124, 687

深度优先搜索与动态规划|543. 二叉树的直径,124. 二叉树中的最大路径和,687. 最长同值路径 二叉树的直径二叉树中的最大路径和最长同值路径 二叉树的直径 好久没写二叉树了,主要还是看遍历的顺序是什么样的。 # Definition for a binary tr…

模拟出栈的所有顺序(dfs+回溯)

题目: 已知某一个字母序列,把序列中的字母按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出栈,求所有可能的出栈顺序 示例: 输入abc 输出abc、acb、bac、bca、cba 代码如下 #define _CRT_SECURE…

人工智能术语翻译(六)

文章目录 摘要UVWXYZ 摘要 人工智能术语翻译第六部分,包括U、V、W、X、Y、Z开头的词汇! U 英文术语中文翻译常用缩写备注Ugly Duckling Theorem丑小鸭定理Unbiased无偏Unbiased Estimate无偏估计Unbiased Sample Variance无偏样本方差Unconstrained …

微服务与Nacos概述-2

微服务间消息传递 微服务是一种软件开发架构,它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展,并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容 provider模块是…

【数学】CF1796 C

Problem - 1796C - Codeforces 题意&#xff1a; 思路&#xff1a; 模拟一下样例可以发现一些规律 Code&#xff1a; #include <bits/stdc.h>#define int long longusing i64 long long;constexpr int N 1e6 10; constexpr int mod 998244353;void solve() {int l…

搭建 Java 部署环境

yum 认识 yum yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上. 包管理器就好比 "应用商店", 我们可以在应用商店上下载一些 app. yum 起到的功能和 Maven 的依赖管理功能类似. 使用 Maven 能帮…

kubernetes pod 资源限制 探针

资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;代表容器运行所需的最小资源量&#xff0c;调度器就使用该信息来决定将 Pod …

JS逆向系列之猿人学爬虫第8题-验证码-图文点选

题目地址 https://match.yuanrenxue.cn/match/8本题的难点就在于验证码的识别,没啥js加密,只要识别对了携带坐标就给返回数据 回过头来看验证码 这里复杂的字体比较多,人看起来都有点费劲(感觉可能对红绿色盲朋友不太又好)&#x

为什么说Java是值传递?

值传递、引用传递 首要我们需要明确什么是值传递、什么是引用传递。 值传递&#xff1a;形参接收的是实参的拷贝&#xff08;副本&#xff09;。因此对形参的修改&#xff0c;不一定会影响实参。引用传递&#xff1a;形参接收的是实参本身&#xff0c;不会创建副本。因此对形…

flutter 手写日历组件

先看效果 直接上代码 calendar_popup_view.dart import package:flutter/material.dart; import package:intl/intl.dart;import custom_calendar.dart; import hotel_app_theme.dart;class CalendarPopupView extends StatefulWidget {const CalendarPopupView({required th…