[发明专利]一种高效读写锁的实现方法在审
申请号: | 201611095878.3 | 申请日: | 2016-12-02 |
公开(公告)号: | CN106776051A | 公开(公告)日: | 2017-05-31 |
发明(设计)人: | 王永峰;尧津来 | 申请(专利权)人: | 北京锐安科技有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52;G06F9/54 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 司立彬 |
地址: | 100192 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 高效 读写 实现 方法 | ||
技术领域
本发明涉及计算机多线程,原子操作,读写锁。具体来说,在多线程环境下,利用原子操作,实现高效的读写锁方法。
背景技术
在多线程环境下,有这样一种场景(即一种单读、单写的场景),对于一段共享数据队列,只有一个用户做写操作,同时也只有一个用户做读操作的情况下,如何提高线程读写锁效率;常用的方法是利用操作系统提供的线程锁,如图1所示,这种方式功能强大,适应性高,但在此场景效率低,因为线程锁采用的是阻塞的方式,另外,线程锁调用本身也有开销,如果大量的调用加锁/解锁的话,开销也比较大。
发明内容
针对现有技术中存在的技术问题,本发明的目的是提供一种高效读写锁的实现方法,本发明通过一种无需加锁的方法,来实现2个线程(一个读线程和一个写线程)对一个共享数据队列的访问。
为了实现上述目的,本发明的解决方案是:
一种高效读写锁的实现方法,其步骤为:
1)程序的主线程初始化共享数据队列,为该共享数据队列设置一写线程和一读线程,以及设置一整数变量M来保存该共享数据队列最大长度,设置一变量K保存当前该共享数据队列中的数据个数;
2)当该程序需要对该共享数据队列进行写操作时,该主线程调用该共享数据队列的写线程,该写线程做写操作前,先检查K,如果K<M,则把要写的数据插入到该共享数据队列的写端,并且增加K的计数值;
3)当该程序需要对该共享数据队列进行读操作时,该主线程调用该共享数据队列的读线程,该读线程做读操作前,检查K,如果K>0,则从该共享数据队列的读端读取一个元素,并且减少K的计数值。
进一步的,所述步骤2)中,如果K大于或等于M,即该共享数据队列已满,则丢弃当前要写的数据。
进一步的,所述步骤2)中,如果K大于或等于M,即该共享数据队列已满,则等待该共享数据队列未满时,将当前要写的数据插入到该共享数据队列的写端,并且增加K的计数值。
进一步的,所述步骤3)中,如果K=0,即该共享数据队列为空,则采取等待或者轮询的方式检测该共享数据队列中是否存在数据,如果存在,则从该共享数据队列的读端读取一个元素,并且减少K的计数值。
进一步的,该共享数据队列中的元素为写入数据的指针。
本发明的主要内容包括:
a.程序的主线程初始化共享数据队列,用一个整数变量M来保存该共享数据队列最大长度,K保存当前该共享数据队列中的数据个数。
b.当程序需要对该共享数据队列进行写操作时,主线程调用该共享数据队列的写线程,该写线程做写操作前,先检查K,如果K<M,运行push操作,即把要写的数据插入到该共享数据队列的写端,并且K++,如果K>=M,说明该共享数据队列已满,那么可以采取丢弃或者等待的方式。
c.当程序需要对该共享数据队列进行读操作时,主线程调用该共享数据队列的读线程,该读线程做读操作前,检查K,如果K>0,执行pop操作,即从该共享数据队列的读端读取一个元素,K--,如果K=0,说明该共享数据队列为空,那么可以采取等待或者轮询的方式。
与现有技术相比,本发明的优点和积极效果为:
在本发明中,在单读单写的情况下,通过整数加减操作,对共享数据队列中的元素进行访问。相对于采用线程锁,本发明大大提高了读写效率,消除了由于频繁的调用线程锁而产生的开销。
附图说明
图1为传统读写锁的流程图;
图2为本发明方法的流程图。
具体实现方式
本发明流程如图2所示,具体如下:
(1)程序启动后,由该程序的主线程来初始化共享数据队列并创建读线程和写线程,该共享数据队列中的元素为写入数据的指针,共享数据队列最大长度为M,共享数据队列当前元素个数为K,K=0。
(2)当程序需要对该共享数据队列进行写操作时,主线程调用该共享数据队列的写线程,该写线程操作的时候,检查K,如果K<M,写线程执行队列的push操作,即把要写的数据插入到共享数据队列的写端,并执行K++;如果K>=M,返回NULL,表示共享数据队列已经满了,本次写入失败,可以根据自身需要进行等待或者轮询。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京锐安科技有限公司,未经北京锐安科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611095878.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:多用户进程互斥方法及装置
- 下一篇:共享资源访问方法和装置