美文网首页犄角旮旯
互斥锁、自旋锁、递归锁、读写锁

互斥锁、自旋锁、递归锁、读写锁

作者: 程序员学哥 | 来源:发表于2020-01-03 10:47 被阅读0次

本文借鉴别人写的,文章的源头没有找到。不想给其他借鉴的引流,就不写出来了。

互斥锁
共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将改资源加锁,使用完后会将其解锁,所以在使用过程中有其它线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会别唤醒,如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又陷入沉睡。

递归锁
同一个线程可以多次获得该资源锁,别的线程必须等待该线程释放所有次数的锁才能获得。

读写锁
读写锁拥有读状态加锁、写状态加锁、不加锁三种状态。只有一个线程可以占有写状态的锁,但可以多个线程同时占有读状态锁,这也是它可以实现高并发的原因。当其处于写状态锁下,任何想要尝试获得锁的线程都会被阻塞,直到写状态锁被释放;如果是处于读状态锁下,允许其它线程获得它的读状态锁,但是不允许获得它的写状态锁,当读写锁感知到有线程想要获得写状态锁时,便会阻塞其后所有想要获得读状态锁的线程。所以读写锁非常适合资源的读操作远多于写操作的情况。

读写锁三个特征:

多个读者可以同时进行读
写者必须互斥,只允许一个写者写,也不能读者写者同时进行
写者优先于读者,一旦有写者,则后续读者必须等待,唤醒时优先考虑写者
自旋锁
自旋锁是一种特殊的互斥锁,当资源被加锁后,其它线程想要再次加锁,此时该线程不会被阻塞睡眠而是陷入循环等待状态(不能再做其它事情),循环检查资源持有者是否已经释放了资源,这样做的好处是减少了线程从睡眠到唤醒的资源消耗,但会一直占用CPU资源。适用于资源的锁被持有的时间短,而不希望在线程的唤醒上花费太多资源的情况。

自旋锁的目的

自旋锁的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保护它自身被操作的原子性,在操作这样的结构体时都经历这样的过程:上锁-操作-解锁。

如果内核控制路径发现自旋锁“开着”(可以获取),就获取并继续自己的执行。相反,如果内核控制路径发现锁由运行在另一个CPU上的内核控制路径“锁着”,就在原地“旋转”,反复执行一条紧凑的循环检测指令,直到锁被被释放。自旋锁是循环检测“忙等”,即等待时内核无事可做,进程在CPU上保持运行,所以它的临界区必须小,且操作过程必须短。不过,自旋锁通常非常方便,因为很多内核资源只锁1毫秒的时间片段,所以等待自旋锁的释放不会消耗太多CPU的时间。

相关文章

  • C++锁

    锁的种类 互斥锁、条件锁、自旋锁、读写锁、递归锁。 互斥锁 头文件: 类型:pthread_mutex_t, 函数...

  • 互斥锁 自旋锁 递归锁 条件锁 读写锁 互斥锁:pthread_ mutex_t(NSLock基于此封装)每个对象...

  • 多线程--锁

    本文主要介绍: 互斥锁 递归锁 读写锁 自旋锁 分布锁 条件变量 信号量 栅栏 一些常用锁的性能。 1. 互斥锁(...

  • iOS底层探索-多线程锁

    多线程的锁大致可分为两大类:互斥锁、自旋锁;也可以分为三类:互斥锁、自旋锁、读写锁。 一、互斥锁:互斥+同步(强调...

  • iOS开发中知道的哪些锁?

    一、自旋锁 A、OSLink 二、互斥锁 A. 递归锁 B. 条件锁 C.普通互斥锁 NSLock 三、GCD锁 ...

  • 互斥锁、自旋锁、递归锁、读写锁

    本文借鉴别人写的,文章的源头没有找到。不想给其他借鉴的引流,就不写出来了。 互斥锁共享资源的使用是互斥的,即一个线...

  • java锁的种类

    锁大概有以下名词:自旋锁,自旋锁的其他种类,阻塞锁,可重入锁,读写锁,互斥锁,悲观锁,乐观锁,公平锁,偏向锁,对象...

  • java锁《一》

    其实如果按照名称来说,锁大概有以下名词:自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁...

  • C++ 线程锁理解

    1、分类 线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能与性能成反比。不过我们一般不使...

  • 转:自旋锁 互斥锁 读写锁 递归锁

    转自:http://blog.csdn.net/evilswords/article/details/118167...

网友评论

    本文标题:互斥锁、自旋锁、递归锁、读写锁

    本文链接:https://www.haomeiwen.com/subject/pjhzoctx.html