当前位置: 首页 > news >正文

高并发系统下Mutex锁、读写锁、线程重入锁的使用思考

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

首先是这几种锁的不同与介绍:Mutex锁、读写锁、线程可重入锁。

Mutex读锁

Mutex锁,有加锁状态、未加锁两种状态;
[未加锁状态]时,任一线程申请锁后,该锁进入[加锁状态];
[加锁状态]时,进程内的所有线程再申请锁时均需要等待,需要等该锁释放后,才能再申请到锁;
在这里插入图片描述

RWLock读写锁

ReadWriteMutex读写锁,有加写锁状态、加读锁状态、未加锁三种状态;
[未加锁状态]时,任一线程申请读锁后,该锁进入[加读锁状态];
[未加锁状态]时,任一线程申请写锁后,该锁进入[加写锁状态];
[加读锁状态]时,任一线程申请读锁时,申请返回成功,该锁锁状态不变;
[加读锁状态]时,任一线程申请写锁时,申请等待,需要等该读锁释放后,才能申请到写锁;
[加写锁状态]时,任一线程申请读锁时,申请等待,需要等该读锁释放后,才能申请到读锁;
[加写锁状态]时,任一线程申请写锁时,申请等待,需要等该读锁释放后,才能再申请到写锁;
在这里插入图片描述

ThreadMutex重入线程锁

ThreadMutex锁,有加锁状态、未加锁两种状态;
[未加锁状态]时,任一线程申请锁后,该锁进入[加锁状态];
[加锁状态]时,该申请到锁的线程下,再次申请该锁时,申请返回成功,该锁锁状态不变;
[加锁状态]时,非该申请到锁的线程,申请加锁时,申请等待,需要等该线程锁释放后,才能再申请到锁;
在这里插入图片描述

使用问题

无论Mutex锁,还是读写锁,还是线程锁。
都存在着,当某个状态加锁时,另一个处申请该锁需要等待的情况,
例如Mutex的加锁情况;
例如读写锁的写锁状态时,或者读取状态申请写锁时;
例如线程锁的其它线程申请锁状态时;
只要存在等待另一个锁释放,那么一旦在某些情况下,该锁占用的周期长了,其它hang住的时间就会长,这个对于高并发系统来说就不容易忍受的。

如何设计高并发系统的锁

怎么设计高并发系统呢?
对于使用锁的情况,我觉得核心点还是,快进快出,申请锁可以,快速用完快速归还;
不要持有锁过长;
不要在持有锁的时候做耗时长的事情;
不要在持有锁的时候做IO操作,无论少量还是大量;
不要在持有锁的时候做大量的计算操作;
不要在持有锁的时候做大量的内存申请释放操作;

如果需要计数,可以直接用std::atomic,快进快出,就一个变量的加锁时间,符合上面的要求;
如果需要唯一进入条件的话,也可以用bool型的std::atomic::compare_exchange_strong,来做唯一进入某个处理的限定;
这些方法都是用轻量级的快进快出加锁解锁的atomic来替代不可预期加锁时长的mutex。

所以总体来看,让加锁快进快出,是高并发系统加锁设计的核心。
当然了,如果可以通过数据结构,设计出无锁设计,那也是相当好的,“无招胜有招”。

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

相关文章:

  • JetsonHacksNano RealSense自动安装脚本文件解析
  • 《仿盒马》app开发技术分享-- 新增地址(端云一体)
  • TLS/PSK
  • Ubantu服务器上的LiberOffice桌面版(版本24.2.7.2)如何设置中文
  • 网络编程2
  • STM32H7系列USART驱动区别解析 stm32h7xx_hal_usart.c与stm32h7xx_ll_usart.c的区别?
  • 湖北理元理律师事务所债务优化服务中的“四维平衡“之道
  • 离轴全息记录与再现
  • 【iOS】 GCD小结
  • Qt 改变窗口显示透明度 + 光标显示形状的属性(4)
  • Redis集群的脑裂问题
  • Pyhton_25_5_26
  • 海外社媒矩阵运营:IP代理配置与区域突破实战策略
  • AI工具使用的最佳实践,如何通过AI工具提高创作与工作效率
  • 涨薪技术|0到1学会性能测试第83课-Windows Sockets录制
  • C++中使用类的继承机制来定义和实现基类与派生类
  • OpenHarmony平台驱动使用(二),CLOCK
  • 编程日志5.21
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • Agilent安捷伦Cary3500 UV vis光谱仪Cary60分光光度计Cary1003004000500060007000 UV visible
  • 县城服务网站如何做/百度指数教程
  • 网站系统下载不了文件/seo还有前景吗
  • 做网站的价/seo网站培训班
  • 优秀的网站设计/外贸网站有哪些平台
  • 亦庄网站开发公司/东莞seo托管
  • 开发区高级中学/网站优化排名公司