[发明专利]一种读写锁实现方法有效
申请号: | 201210511370.2 | 申请日: | 2012-12-03 |
公开(公告)号: | CN102999378A | 公开(公告)日: | 2013-03-27 |
发明(设计)人: | 李坤;王永炎;郭超;王宏安 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 余长江 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 读写 实现 方法 | ||
技术领域
本发明涉及读写锁实现方法,尤其涉及基于读写锁的线程间的同步方法,可以应用于各种软件系统研发的软件开发技术领域,属于信息技术领域
背景技术
在信息技术领域中,软件开发涉及很多的技术,包括内存数据组织管理、消息通信、索引技术、同步互斥技术等,本发明关注于软件开发中线程间的同步技术,在一些特定的软件系统研发过程中涉及到线程间的同步技术,而且对同步操作具有较高的实时性和高效性的要求,比如说:实时数据库管理系统、关系数据库管理系统、中间件等。
现有的并发同步互斥对象(可详见微软官方关于互斥对象的说明材料http://msdn.microsoft.com/en-us/library/windows/desktop/ms684266%28v=vs.85%29.as px)主要有互斥量(Mutex)、信号量(Semaphore)、事件(Event)、临界区(Critical Section)(可详见微软官方关于临界区对象的说明材料http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530%28v=vs.85%29.as px)等,可根据对象所属层次分为内核态对象和用户态对象,也可根据用途分为进程间同步技术和线程间同步技术。临界区是保证在某一时刻只有一个线程能访问数据的简便办法,是用户态对象;互斥量跟临界区相似,只有拥有互斥对象的线程才具有访问资源的权限,但是比临界区复杂,属于内核态对象,可以在不同应用进程之间实现对资源的安全共享。信号量用来控制对一个具有有限数量用户资源进行并发访问,包含一个使用计数、最大资源数、当前资源计数,最大资源数表示信号量可以控制的最大资源数量,当前资源数表示信号当前可用的资源数量;事件用来通知线程有某些事件已发生,从而唤醒该线程执行后继任务。互斥量、信号量、事件都是内核态的互斥或同步技术,因此也可用作进程和线程间同步。临界区只能用作线程间同步,但由于是用户态技术,没有从内核态到用户态的环境切换开销,因此其性能优于互斥量。
软件系统中大量的并发请求可以分为只读请求和读写请求,前者可以对共享资源同时操作,后者必须排它性的占有共享资源,不允许他人访问。这种情况下直接使用互斥量、信号量、事件等都是不合适的,一方面有较大的内核态与用户态的切换开销,另一方面没有区分并发读写请求的特点,导致可以并发执行的只读请求变成串行执行,大大降低了系统效率。因此,需要针对大量并发读写请求,精心设计一种线程间同步机制,实现最大化的并发执行,从而提高软件系统的整体性能。
发明内容
本发明针对实时数据库管理系统、关系数据库管理系统、中间件的线程间同步的实时性需求和性能要求,设计并提出了一种实时快速的多线程访问共享资源的同步方法。
本发明要解决的技术问题
在研发软件系统过程中通常会遇到多线程并发访问共享资源的问题,如果并发度比较低,用简单的互斥量(Mutex)就可以实现。但是,在并发度较高时,一些高性能软件系统也要求多线程间的同步操作具有较高的性能。并发的多线程按照是否修改共享资源可以分为两类:只读线程和修改线程,一个好的多线程同步技术应该允许多个只读线程可以同时访问共享资源,其次更新线程应该在等待当前只读线程完成操作后即可马上获取共享资源,不会出现后继的只读线程从修改线程抢占共享资源的情况。由于主流操作系统如Windows 2000、Windows XP以及Windows 2003 Server没有内置读写锁,因此通常需要开发人员耗费较长的时间来设计和实现线程间的读写锁,而且最终实现的效果并不一定能够满足软件系统对线程间同步的高性能要求。
本发明针对这类技术问题,提出了一种通用的、实时快速的线程间的读写锁解决方案如下,给出了读写锁的具体实现细节。一方面,可以大大减少开发人员的时间,另一方面,可以满足软件系统对多个读写线程之间进行同步的性能要求。
一种读写锁实现方法,其步骤包括:
1)初始化读写锁,根据读写锁组件创建读临界区、写临界区和写通知事件三个对象,所述读临界区和所述写临界区初始化为可进入状态,所述写通知事件初始化为被触发状态;
2)当多个读线程和/或写线程并发访问共享资源,根据所述临界区保护所述共享资源内关键代码,设置读写锁;
2-1)申请读锁接口时,先进入写临界区再进入读临界区,根据读锁个数阻止写或读线程的操作,同时所述写通知事件设为非触发状态;释放读锁接口时,进入读临界区,若此时读锁个数为0则同时将所述写通知事件设为触发状态;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210511370.2/2.html,转载请声明来源钻瓜专利网。