为什么需要内核自旋锁?

现在很多CPU都是几核几核的了,如果有一个变量A,CPU-X正在访问,突然CPU-Y也过来访问他,这时候就可能出现问题,因为这个A非常重要,可能导致系统崩溃,中断异常等。

我们来看之前说的TP驱动里面的代码

void gtp_irq_enable(struct goodix_ts_data *ts)
{unsigned long irqflags = 0;GTP_DEBUG_FUNC();spin_lock_irqsave(&ts->irq_lock, irqflags);if (ts->irq_is_disable) {enable_irq(ts->client->irq);ts->irq_is_disable = 0; }spin_unlock_irqrestore(&ts->irq_lock, irqflags);
}

在进行中断操作的时候,用到了自旋锁,就是担心正在操作的时候又被调用,听起来有点拗口,但是就是那么一回事。

自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU已访问完临界区,将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞,而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间,但时间通常很短,在1毫秒以下。

自旋锁用于多个CPU系统中,在单处理器系统中,自旋锁不起锁的作用

Linux 内核自旋锁相关推荐

  1. Linux内核自旋锁使用笔记

    Reference: spin_lock_bh()与spin_unlock_bh() Linux内核自旋锁 Linux自旋锁 Spinlock - Wikipedia, the free encycl ...

  2. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  3. Linux内核自旋锁

    Linux内核自旋锁 自旋锁 自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU ...

  4. linux内核自旋锁解释,LINUX内核笔记:自旋锁

    目录 1.自旋锁作用与基本使用方法? 与其他锁一样,自旋锁也用于保护临界区,但是自旋锁主要是用于在SMP上保护临界区.在SMP上,自旋锁最多只能被一个可执行线程持有,如果一个线程尝试获得一个被争用的自 ...

  5. linux内核自旋锁API

    我们大概都了解,锁这种机制其实是为了保护临界区代码的,关于使用和定义,我总结的API如下: #include <linux/spinlock.h>定义自旋锁 spinlock_t lock ...

  6. linux内核 自旋锁示例,自旋锁(示例代码)

    一.什么是自旋锁 一直以为自旋锁也是用于多线程互斥的一种锁,原来不是! 自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制.自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用 ...

  7. linux内核自旋锁的代码分析

    前面看操作系统导论这本书,其中锁的历史变化有点感悟,现在追一下linux内核锁的代码. 一.自旋锁 1.锁的结构体 系统自旋锁结构体如下: typedef struct spinlock {union ...

  8. Linux ARM平台开发系列讲解(自旋锁) 3.3.1 Linux内核自旋锁描述

    1. 概述 原子操作只能对整形变量或者位进行保护,但是,在实际的使用环境中怎么可能只有整形变量或位这么简单的临界区.举个最简单的例子,设备结构体变量就不是整型变量,我们对于结构体中成员变量的操作也要保 ...

  9. php 自旋锁,Linux内核自旋锁使用笔记

    原理 首先,spinlock是一把锁,它的功能与其他锁的作用类似,都是对用于临界区进行原子读写.使用这把锁时,原理上就是不停的循环检查锁的状态,直到可用的时候进入临界区. 与mutex的区别 Spin ...

最新文章

  1. sklearn决策树模型机器学习参数解释很详细中文
  2. Microsoft office Communications server 2007部署
  3. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)
  4. python语言入门pdf-python语言入门
  5. python if条件判断_python if not in 多条件判断代码
  6. Python: 大型数组运算
  7. python不支持_不支持的操作:不可写的python
  8. Transformer模型总结
  9. 【转载】开源且免费软件包分类列表
  10. 瑞幸咖啡业绩造假22亿:市场监管总局罚款1000万
  11. 电脑办公技巧:他做了9小时的工作,我5秒就做完了
  12. 设计模式--状态模式(C语言实现)
  13. Tara APP隐私政策
  14. 爱的无常、当下、柔软
  15. 家装软件相关算法和技术归纳
  16. k短路(HDU6705)
  17. 无线网可拼服务器吗6,当WiFi 6遇到了WiFi 6+,我们的网速真的变快了吗?
  18. UNRAID挂载exFat格式的USB磁盘后续(自动挂载)
  19. 32 | KafkaAdminClient:Kafka的运维利器
  20. 视频教程-实用通俗易懂的设计模式-软件设计

热门文章

  1. Chrome英文版离线安装包下载
  2. error U1087: cannot have : and :: dependents for same target
  3. python 的作用
  4. android按钮固定尺寸,如何在android中保持按钮的固定宽高比
  5. python 递归函数与循环的区别_提升Python效率之使用循环机制代替递归函数
  6. c++ sleep函数_Linux 多线程应用中如何编写安全的信号处理函数
  7. WindowsAPI详解——GetCurrentDirectory 获得程序当前目录
  8. C++多态相关关问题及虚表剖析
  9. 计算机专业联考335分,联考专业分、文化分达到多少能过本科线(附2019年美术高考分数线汇总...
  10. linux中timer的作用,linux - linux / timer.h setup_timer()到期功能不起作用? - 堆栈内存溢出...