互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒

自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CPU资源

读写锁:rwlock,区分读和写,处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。
注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写优先于读,当有线程因为等待写锁而进入睡眠时,则后续读者也必须等待
适用于读取数据的频率远远大于写数据的频率的场合。

RCU:即read-copy-update,在修改数据时,首先需要读取数据,然后生成一个副本,对副本进行修改。修改完成后,再将老数据update成新的数据。使用RCU时,读者几乎不需要同步开销,既不需要获得锁,也不使用原子指令,不会导致锁竞争,因此就不用考虑死锁问题了。而对于写者的同步开销较大,它需要复制被修改的数据,还必须使用锁机制同步并行其它写者的修改操作。在有大量读操作,少量写操作的情况下效率非常高

信号量:semaphore,是用于线程间同步的,当一个线程完成操作后就通过信号量通知其它线程,然后别的线程就可以继续进行某些操作了。

信号量和互斥锁的区别:semaphore

  1. 信号量是用于线程间同步的,而互斥锁是用于线程的互斥的
  2. 互斥量的获取和释放都是在同一线程中完成的,pthread_mutex_lock(),pthread_mutex_unlock()。而信号量的获得和释放是在不同的线程的操作为sem_wait(),sempost();
  3. 互斥量的值只能为0和1,而信号量只要value>0,其它线程就可以sem_wait成功,成功后信号量value减一。若value值不大于0,则sem_wait阻塞,直到sem_post释放后value加1。因此信号量的值可以为非负整数

常见锁的区别及适用场景相关推荐

  1. 乐观锁和悲观锁的区别及使用场景

    转载自:https://blog.csdn.net/u010739551/article/details/81184203 悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每 ...

  2. 悲观锁、乐观锁的区别及使用场景

    悲观锁: 每次获取到数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁 期间对该数据进行读写的其他线程都会进行等待 乐 ...

  3. 悲观锁和乐观锁的区别及使用场景

    悲观锁 每次读取数据的时候,都会担心数据被修改,所以每次查询数据的时候都会加锁,确保自己在读取数据的时候不会被别人修改.使用完成后对数据经行解锁,由于数据经行加锁,期间对该数据进行读写的其他线程都会进 ...

  4. Java编程:悲观锁、乐观锁的区别及使用场景

    定义: 悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁.由于 ...

  5. 悲观锁和乐观锁的区别和应用场景

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...

  6. Hive常见的存储格式的区别与应用场景

    Hive常见的存储格式的区别与应用场景 一.文件存储格式 行存储和列存储 1.TextFile 2.sequencefile 3.RC 4.orc(工作中常用) 5.parquet 二.四种存储格式分 ...

  7. 乐观锁和悲观锁区别以及使用场景

    乐观锁和悲观锁是并发控制中两种不同的策略,用于解决多个线程或进程同时访问和修改共享数据时可能出现的并发问题. 悲观锁 悲观锁的基本思想是,在数据被访问时,假设会有其他的线程或进程也会访问这个数据,所以 ...

  8. 常见图像格式类型区别及使用说明绝对路径和相对路径的使用场景css3实现loading效果

    经前两天晚上的提问,胡老师给我留下了两个问题: 1. JPEG PNG GIF等图像格式的区别和使用情况: 2. 绝对路径和相对路径的使用场景: 3. 如何用非GIF动画实现loading效果: 以下 ...

  9. 【hive】Hive常见的存储格式的区别与应用场景

    Hive常见的存储格式的区别与应用场景 一.文件存储格式 行存储和列存储 1.TextFile 2.sequencefile 3.RC 4.orc(工作中常用) 5.parquet 二.四种存储格式分 ...

最新文章

  1. 全国大学生智能汽车竞赛-讯飞智慧餐厅
  2. 编写自己的Shell解释器
  3. 文献记录(part36)--A survey on heterogeneous network representation learning
  4. 使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务
  5. 【C语言】数据结构C语言版 实验2 不带头结点的单链表
  6. Pandas知识点-排序操作
  7. 13.C++-静态成员变量、静态成员函数
  8. 测试开发之测试方法第一篇
  9. LADRC的学习——用simulink搭建仿真模型
  10. Java中的编译、反编译和反编译工具全家桶分享
  11. 1221_MISRA_C规范学习_关于函数的规则要求
  12. vue+elementui+阿里icon unicode 踩坑
  13. 洛谷 P1724 东风谷早苗
  14. 程序、进程、作业的联系
  15. 简单使用PHP 的 Silm框架.
  16. PMP学习考试感悟之——坚持、努力是唯一法宝
  17. matlab z rc电路,基于MATLAB模拟RC电路的暂态过程.pdf
  18. pppd参数中文解释
  19. 计算机所选区域单元格数值,筛选Excel2007单元格区域或表中的数据
  20. 【测验1 编程题】: Python基本语法元素 (第1周)

热门文章

  1. 那个人总有一天会爱你
  2. 第三十三天- 线程创建、join、守护线程、死锁
  3. 鹏程万里------HIM开发中遇到的问题
  4. shell脚本编程学习笔记2(xdl)——Bash变量
  5. Python学习:Python分析钉钉评论(一)爬取数据
  6. 能玩java游戏oppo按键手机_游戏手机排行榜 | OPPO Reno果然不负期待
  7. 使用百度地图POI爬取需要的数据
  8. git-flow图解
  9. css的hue-rotate是调整了色相吗?
  10. 螣龙安科:迷宫勒索病毒——勒索受害者一年并且人数仍在增长