(三)内核锁

1、mutex_lock,mutex_unlock只用在进程间
2、spin_lock,spin_unlock一般是只用在中断或者只用在进程中。如果进程和中断都用spin_lock获取锁,访问临界区,可能会导致死锁
3、spin_lock_irq,spin_unlock_irq可以用在进程和中断中申请锁
4、spin_lock_irqsave,spin_unlock_irqrestore保留spin_lock_irq功能,退出锁后会保持内核中断开启或关闭状态。
5、spin_lock_bh,spin_unlock_bh这个是中断底半部与进程间用

时间: 2024-11-07 10:48:59

(三)内核锁的相关文章

大话Linux内核中锁机制之RCU、大内核锁

大话Linux内核中锁机制之RCU.大内核锁 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL).文章的最后对<大话Linux内核中锁机制>系列博文进行了总结,并提出关于目前Linux内核中提供的锁机制的一些基本使用观点. 十.RCU机制 本节将讨论另一种重要锁机制:RCU锁机制.首先我们从概念上理解下什么叫RCU,其中读(Read):读者不需要获得任何锁就可访问RCU保护的临界

线程与进程--线程三把锁

为什么要有三把锁 学习三把锁时候我们需要先知道为什么要有三把锁 全局资源(counter)被抢占的情况,问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全".在开发过程中我们必须要避免这种情况,那怎么避免?这就用到了我们在综述中提到的互斥锁了. 同步锁 (Lock)又名互斥锁 互斥锁概念 Python编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁"

自旋锁、文件锁、大内核锁

自旋锁(Spin lock) 自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是 否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名.其作用是为了解决某项资源的互斥使用.因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远 高于互斥锁.虽然它的效率比互斥锁高,但是它也有些不足之处: 1.自旋锁一直占用CPU,他在未获得锁的情况下,一直运行--自旋,所以占用着CPU,如果不能在很短的时 间内获得锁,这无疑会使CPU效率降

并发编程之 Java 三把锁

前言 今天我们继续学习并发.在之前我们学习了 JMM 的知识,知道了在并发编程中,为了保证线程的安全性,需要保证线程的原子性,可见性,有序性.其中,synchronized 高频出现,因为他既保证了原子性,也保证了可见性和有序性.为什么,因为 synchronized 是锁.通过锁,可以让原本并行的任务变成串行.然而如你所见,这也导致了严重的性能受损.因此,不到万不得已,不要使用锁,特别是吞吐量要求特别高的 WEB 服务器.如果锁住,性能将呈几何级下降. 但我们仍然需要锁,在某些操作共享变量的时

Java多线程(三)锁对象和线程池

1:锁(Lock) 1.1       java提供了一个锁的接口,这个锁同样可以达到同步代码块的功能,API文档上说使用锁比使用synchronized更加灵活. 1.2       如何使用这个“锁” //1.创建一个所对象,我们可以理解为写一个synchronized代码块 public static Lock lock = new ReentrantLock();//用lock的一个子类去创建 //2.假设有某程序中使用两把锁,这两把锁是类似于synchronized里的锁 //要使用到

谈论高并发(三)锁的一些基本概念

并发编程概念的一些基本的了解是非常重要的.告诉我们认为表明,在方向上的主要问题. 这个讲锁的一些基本概念. 在正常情况下,我们说的锁都指的是"互斥"锁.因为有一些特殊的锁,例"读写锁",一点都没有互斥. 排斥锁. 锁是处理并发的一种同步手段.单线程程序和并发程序的终于目的都是要保证程序的正确性,可是最大的差别是: 单线程程序的正确性仅仅关注程序的执行结果和目标是一致的 并发程序的正确性除了执行结果正确外,还包括了活性的特性,所谓活性,指的就是程序无死锁,无饥饿 所以

聊聊高并发(三)锁的一些基本概念

理解并发编程的一些基本概念很重要,给我们思考问题指明一个基本的方向.这篇说一说锁的一些基本概念. 在通常情况下我们说的锁都指的是"互斥"锁,因为在还存在一些特殊的锁,比如"读写锁",不完全是互斥的.这篇文章说的锁专指互斥锁. 锁是处理并发的一种同步手段.单线程程序和并发程序的最终目的都是要保证程序的正确性,但是最大的区别是: 单线程程序的正确性只关注程序的运行结果和目标是一致的 并发程序的正确性除了运行结果正确外,还包含了活性的特性,所谓活性,指的就是程序无死锁,无

synchronized(三) 锁的膨胀过程(锁的升级过程)深入剖析

锁为何存在: 因为在并发情况为了保证线程的安全性,是在一个多线程环境下正确性的概念,也就是保证多线程环境下共享的.可修改的状态的正确性(这里的状态指的是程序里的数据),在java程序中我们可以使用synchronized关键字来对程序进行加锁. 当声明synchronized代码块的时候,编译成的字节码将包含monitorenter指令 和 monitorexit指令.这两种指令均会消耗操作数栈上的一个引用类型的元素(也就是 synchronized 关键字括号里的引用),作为所要加锁解锁的锁对

redis 学习 三 乐观锁

<?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 实现乐观锁机制 * * @example php optimistic-lock.php */ $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 监视 count 值 $redis->watch('count'); // 开启事务 $redis->multi(); /