读写锁实现思路及简单测试

本文介绍了读写锁与互斥锁的区别,并详细阐述了读写锁的实现思路,包括状态标志、读者和写者计数、互斥量等关键设计。通过模拟测试,分析了读写锁在不同数据量下的性能表现,指出读写锁适用于读多写少的场景,可提升服务性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 读写锁与互斥锁的区别及读写锁应用场景

        对于后端数据服务维护人员来说,大多数数据类型服务,总是数据读取次数远大于数据修改次数,而读写锁的特殊机制非常适用于数据类型服务。近年来一直负责后端服务维护与功能开发,所负责的后端数据类型服务却都是采用互斥锁来进行数据保护,读写锁未尝一见,总是对其念念不忘,抽时间按照自己所想来实现一把,亲自揭开这个神秘的东东。

        互斥锁:顾名思义是排他性质,在任意时刻只有一个线程能获得该锁使用权。利用该特性,在多线程编程中用互斥锁保护数据,保证数据即便是在多线程环境下,同一时刻也只有一个获得互斥锁使用权的线程可进行数据读取或写入,其他需要访问数据的线程只有在互斥锁被释放后,获得该锁使用权才能进行数据操作。通过该种机制才能保障数据的完整性,有效性和程序的健壮性,杜绝脏数据,访问无效对象,服务崩溃等bug。互斥锁具有排他性,所有锁使用者只能串行运行

        读写锁:互斥锁不进行数据访问行为分类,不管数据读取还是数据写入,所有需要访问数据的线程被强制排队串行,依次进行数据访问。如果将数据访问行为分类,将读取数据划分为读者,数据写入划分为写者,根据数据访问行为逻辑可得到,所有读者线程因为仅仅进行数据读取,不会进行数据和数据结构的变更,在该前提下,所有读者线程是完全可以并行。在数据可读条件下,所有读者线程可同时访问数据。写者线程因为可能会对数据和数据结构进行变更,所以一旦写者线程获得了锁的使用权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值