互斥锁(mutexlock):

最常使用于线程同步的锁;标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁;临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程睡眠等待锁释放时被唤醒

自旋锁(spinlock):

同样用来标记只能有一个线程访问该对象,在同一线程多次加锁操作会造成死锁;使用硬件提供的swap指令或test_and_set指令实现;同互斥锁不同的是在锁操作需要等待的时候并不是睡眠等待唤醒,而是循环检测保持者已经释放了锁,这样做的好处是节省了线程从睡眠状态到唤醒之间内核会产生的消耗,在加锁时间短暂的环境下这点会提高很大效率

读写锁(rwlock):

高级别锁,区分读和写,符合条件时允许多个线程访问对象。处于读锁操作时可以允许其他线程和本线程的读锁, 但不允许写锁, 处于写锁时则任何锁操作都会睡眠等待;常见的操作系统会在写锁等待时屏蔽后续的读锁操作以防写锁被无限孤立而等待,在操作系统不支持情况下可以用引用计数加写优先等待来用互斥锁实现。 读写锁适用于大量读少量写的环境,但由于其特殊的逻辑使得其效率相对普通的互斥锁和自旋锁要慢一个数量级;值得注意的一点是按POSIX标准 在线程申请读锁并未释放前本线程申请写锁是成功的,但运行后的逻辑结果是无法预测

递归锁(recursivelock):

严格上讲递归锁只是互斥锁的一个特例,同样只能有一个线程访问该对象,但允许同一个线程在未释放其拥有的锁时反复对该锁进行加锁操作; windows下的临界区默认是支持递归锁的,而linux下的互斥量则需要设置参数PTHREAD_MUTEX_RECURSIVE_NP,默认则是不支持

嵌入式 自旋锁、互斥锁、读写锁、递归锁相关推荐

  1. 自旋锁/互斥锁/读写锁/递归锁的区别与联系

    自旋锁 互斥锁 读写锁 递归锁 互斥锁(mutexlock): 最常使用于线程同步的锁:标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁:临界区和互斥量都可用来实现此锁 ...

  2. Java中的共享锁和排他锁(以读写锁ReentrantReadWriteLock为例)

    重要声明:本人之前对java中的读写锁也不是非常了解,用的也不是很多,尤其在读写锁的策略原理一块没有深究过,本篇文章是在学习[玩转Java并发工具,精通JUC,成为并发多面手]课程后写的,故文章类型选 ...

  3. QThread中的互斥、读写锁、信号量、条件变量

    该文出自:http://www.civilnet.cn/bbs/browse.php?topicno=78431 在gemfield的<从pthread到QThread>一文中我们了解了线 ...

  4. 【Qt开发】QThread中的互斥、读写锁、信号量、条件变量

    在gemfield的<从pthread到QThread>一文中我们了解了线程的基本使用,但是有一大部分的内容当时说要放到这片文章里讨论,那就是线程的同步问题.关于这个问题,gemfield ...

  5. python多线程之线程锁(Lock)和递归锁(RLock)实例

    一.线程锁 Threading模块为我们提供了一个类,Threading.Lock锁.我们创建一个该类对象,在线程函数执行前,"抢占"该锁,执行完成后,"释放" ...

  6. java dom4j读写锁,java锁的深度化-重入锁,读写锁,乐观锁,悲观锁

    1.重入锁 目的:避免死锁的现象 锁作为并发共享数据,保证一致性的工具,在java平台有多种实现synchronized(重量级)和ReentrantLock(轻量级)等等,这些已经写好提供的锁为我们 ...

  7. 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition

    文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...

  8. 8-26-GLI锁与普通互斥锁、死锁问题、递归锁、信号量、Event事件、并发的tcp通信、进程池线程池

    昨日回顾1 生产者消费者-在生产者和消费者之间,通过队列,增加缓冲,避免了生产者和消费者之间交互-Queue,redis,rabbitmq,kafka-解耦合,队列是微服务的基础2 线程理论,开启-进 ...

  9. java读写锁降级_java的读写锁中锁降级的问题

    读写锁是什么我就不多说了,下面说什么是锁降级 锁降级: 锁降级指的是写锁降级成为读锁.如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级.锁降级是指把持住(当前拥有 ...

  10. JAVA 读写锁中锁降级的必要性

    既然大家看到了这篇博客,也应该都大概了解了读写锁的一些概念,咱们直接上主题,读写锁中为什么要用锁降级: 先引用书上的一段话说说锁降级的概念:         锁降级指的是写锁降级成为读锁.如果当前线程 ...

最新文章

  1. LeetCode实战:买卖股票的最佳时机
  2. Xcode学习C++(三、const)
  3. java和python根据对象某一个属性排序
  4. pcb入门之原理图的绘制
  5. 随着计算机网络的广泛应用,【网络技术论文】计算机网络技术的广泛应用探析(共3558字)...
  6. linux pxe启动ftp格式,FTP+DHCP+TFTP+PXElinux实现RHLINUX的网络自动安装
  7. Spring系列(二):Bean注解用法介绍
  8. python3中format函数列表_Python3之字符串格式化format函数详解(上)
  9. php 日期时间操作-可算出几天后的时间
  10. OpenCV中矩阵的归一化
  11. Ubuntu更新Chrome到最新的版本
  12. 俞敏洪:度过有意义的生命(转)
  13. C++ 一篇搞懂继承的常见特性
  14. R 回归 虚拟变量na_统计学基础笔记/单章:虚拟变量回归
  15. Git(2)-Git常用的操作和概念
  16. bmc网络配置_SA5212M5-BMC设置
  17. python打卡提醒机器人(企业微信)
  18. Zookeeper与统一配置管理
  19. CentOS7 初次安装记录(三)配置PHP和MYSQL
  20. 图灵奖得主Geoffrey Hinton:我的五十年深度学习生涯与研究心法

热门文章

  1. 软银千亿美元愿景基金PPT,孙正义解读股权投资IRR=44%
  2. 垃圾要分类!我们的大脑如何处理垃圾呢?
  3. 中国信通院:2019年Q1全球人工智能产业数据报告
  4. 百度谷歌等联合推出机器学习基准 加速AI软硬件发展
  5. 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
  6. 程序员 35 岁就该退休了吗?
  7. “我想在 CSDN 写小说” 评论亮了 | 每日趣闻
  8. 一个web.Config或app.Config自定义段configSections的示例
  9. Bzoj3530: [Sdoi2014]数数
  10. 你知道如何在springboot中使用redis吗