linux自旋锁

1、为什么要有自旋锁

我们写驱动代码的时候,往往忽略这一点,然后版本发布后会经常遇到一些异常的问题,资源的竞争相当重要,很容易出现空指针

引用:
if (!dptr->data[s_pos]) {
dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL);
if (!dptr->data[s_pos])
goto out;
}
假设有 2 个进程( 我们会称它们为”A”和”B” ) 独立地试图写入同一个 schull 设备的相同偏移. 每个进程同时到达上面片段的第一行的 if 测试. 如果被测试的指针是 NULL,每个进程都会决定分配内存, 并且每个都会复制结果指针给 dptr->datat[s_pos]. 因为2 个进程都在赋值给同一个位置, 显然只有一个赋值可以成功.当然, 发生的是第 2 个完成赋值的进程将”胜出”. 如果进程 A 先赋值, 它的赋值将被进程 B 覆盖. 在此, scull 将完全忘记 A 分配的内存; 它只有指向 B 的内存的指针. A所分配的指针, 因此, 将被丢掉并且不再返回给系统.
事情的这个顺序是一个竞争情况的演示. 竞争情况是对共享数据的无控制存取的结果. 当错误的存取模式发生了, 产生了不希望的东西. 对于这里讨论的竞争情况, 结果是内存泄漏. 这已经足够坏了, 但是竞争情况常常导致系统崩溃和数据损坏. 程序员可能被诱惑而忽视竞争情况为相当低可能性的事件. 但是, 在计算机世界, 百万分之一的事件会每隔几秒发生, 并且后果会是严重的.

2、使用自旋锁注意事项

1、尽可能短时间的拥有锁
2、获取锁之前,要禁止终端,避免无限自旋让系统崩溃

3、自旋锁的一些函

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

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

相关文章

java基础-public/private/protected的具体区别

在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。 1、public:publi…

【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

Linux设备驱动之mmap设备操作

1.mmap系统调用 void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); 功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write&#xff…

hadoop安装以及Java API操作hdfs

因为工作需求,需要我这边实现一个大文件上传到HDFS的功能,因为本机无法连接公司内网的集群,无奈只好自己动手搭建一个单节点的Hadoop来满足工作的需求。下面简单介绍下安装过程中遇到的坑我的机器是阿里云的最低配 安装文件:hadoo…

【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

给ubuntuGedit安装gedit-source-code-browser

插件链接下载 https://bugs.launchpad.net/ubuntu/source/gedit-source-code-browser-plugin/bug/1242126 下载这个安装完后还用不了,还要添加下面的补丁 diff -Naur old-plugins/sourcecodebrowser/ctags.py plugins/sourcecodebrowser/ctags.py --- old-plugin…

Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.

解决OMP: Hint: This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is l…

Linux 系统版本信息

1、# uname -a (Linux查看版本当前操作系统内核信息) 2、# cat /proc/version (Linux查看当前操作系统版本信息) 3、# cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息&…

DEVICE_ATTR的使用

使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。 这几个东东的区别就是,DEVICE_ATTR对应的文件…

【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

泛型(模拟list)

package Test; import java.util.Arrays; public class genericity<T> { private Object[] t; public genericity() { super(); t new Object[0]; } //增加数据 public void add(T t1) { t Arrays.copyOf(t, t.length 1); t[t.length - 1] t1; } //查询数据 public i…

中断处理的tasklet(小任务)机制-不过如此

中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是&#xff0c;中断是一个随机事件&#xff0c;它随时会到来&#xff0c;如果关中断的时间太长&#xff0c;CPU就不能及时响应其他的中断请求&#xff0c;从而造成中断的丢失。因此&#xf…

【Pytorch神经网络理论篇】 29 图卷积模型的缺陷+弥补方案

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】22 基于Cora数据集实现图注意力神经网络GAT的论文分类

注意力机制的特点是&#xff0c;它的输入向量长度可变&#xff0c;通过将注意力集中在最相关的部分来做出决定。注意力机制结合RNN或者CNN的方法。 1 实战描述 【主要目的&#xff1a;将注意力机制用在图神经网络中&#xff0c;完成图注意力神经网络的结构和搭建】 1.1 实现…

用OC和Swift一起说说二叉树

前言&#xff1a; 一&#xff1a;在计算机科学中&#xff0c;二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09;。二叉树常被用于实现二叉查找树和二叉堆。二&#xf…

【Pytorch神经网络理论篇】 30 图片分类模型:Inception模型

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

mtk pwmlinux timer

pwm控制还是有很多要注意的地方 附上驱动的代码 /** drivers/leds/leds-mt65xx.c** This file is subject to the terms and conditions of the GNU General Public* License. See the file COPYING in the main directory of this archive for* more details.** Hydrodent …

【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

CentOS7 编译安装golang和rpm安装golang

编译安装 1、下载golang二进制安装包&#xff1a; https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz 2、解压安装包到指定目录&#xff0c;此处以解压到/usr/local目录下为例&#xff1a; 1 tar -C /usr/local -xzf ../packages/go1.8.linux-amd64.tar.gz 3、在…

Class_fileAndroid应用调用方法

java代码调用 fos.write这里面是byte类型的 + private static final String LEDBLPATH="/sys/class/hdyrodent_charger_led/brightness"; + private final void SetChargerLedBrightness(String path,int brightness) + { + try{ + …