CN112416556B - 一种数据读写优先平衡方法、***、装置及存储介质 - Google Patents
一种数据读写优先平衡方法、***、装置及存储介质 Download PDFInfo
- Publication number
- CN112416556B CN112416556B CN202011325771.XA CN202011325771A CN112416556B CN 112416556 B CN112416556 B CN 112416556B CN 202011325771 A CN202011325771 A CN 202011325771A CN 112416556 B CN112416556 B CN 112416556B
- Authority
- CN
- China
- Prior art keywords
- lock
- read
- write
- priority
- counter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据读写优先平衡方法、***、装置及存储介质,方法包括:通过互斥锁为数据读写请求加锁;根据当前数据的引用计数器判断当前数据的读写优先级类型标志,包括无读写优先、读优先、写优先;根据读写优先级类型标志对应变量的引用计数器判断读写锁占用情况,包括读锁占用、写锁独占和没有任何锁占用;根据读写锁占用情况与读写锁最大允许数计数器剩余值得到数据的读写优先级类型标志;通过互斥锁为请求数据读写操作解锁。本发明的方法提升了数据读操作的并发性能,能够使得***长期运行稳定,数据高并发访问性能优良,在服务器软件产品应用中取得了很好的经济效应。
Description
技术领域
本发明属于服务器应用场景中的数据读写方法技术领域,特别涉及一种数据读写优先平衡方法、***、装置及存储介质。
背景技术
当对一个允许多个线程同时并发读,但仅允许一个线程独占写的资源进行多线程安全访问保护时,一般使用读写锁来提高读的并发性能。而目前被广泛使用的读写锁无论采用哪种实现技术,这些读写锁都可以按照其读写优先级的不同而分为读优先读写锁和写优先读写锁。当所保护的资源为读并发量比较大时,适合使用写优先锁,而当所保护的资源为写并发量比较大时,适合使用读优先锁。这种选择的主要目的是避免读写锁出现读写饥饿问题,当所保护的资源为读并发量比较大时,如果使用读优先级,则会由于写操作饥饿而造成写操作死锁;而当所保护的资源为写并发量比较大时,如果使用写优先级,则会由于读操作饥饿而造成读操作死锁。而在一些服务器***中,存在另外一种更加复杂的应用场景,有时读并发量远大于写并发量,而有时又是写并发量远大于读并发量,而且它们出现的概率和时机无法预知,在这种情况下,无论使用写优先锁还是读优先锁,最终都可能会不可预期的出现服务进程死锁的情况。
目前,针对读写并发不确定,有时读并发量远大于写并发量,而有时又是写并发量远大于读并发量,而且它们出现的概率和时机无法预知的服务器应用场景中,一般使用互斥锁来提供资源并发线程安全访问,从而有效避免因为读写锁发生读写饥饿而导致服务进程死锁的情况。
但互斥锁因为对所有的读写操作都是互斥的,在读并发量高时,无法充分利用读操作可并发性来提高***的读性能,对于高并发的服务器***来读,将会大大降低***的读操作并发性能。
发明内容
为解决现有技术中***的读操作并发性能降低的问题,本发明提供了一种数据读写优先平衡方法、***、装置及存储介质,本发明的方法读操作并发性能提升,能够使得***长期运行稳定,数据高并发访问性能优良,取得了很好的经济效应。
为实现上述目的,本发明采用以下技术手段:
一种数据读写优先平衡方法,包括:
通过互斥锁为数据读写的优先级类型标志变量、计数器变量和读/写条件锁并发安全访问加锁;
根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志;
通过互斥锁为请求数据读写操作解锁。
作为本发明的进一步改进,所述请求数据读写操作包括申请读锁请求、尝试申请读锁请求、释放读锁请求、申请写锁请求、尝试申请写锁请求和释放写锁请求。
作为本发明的进一步改进,当用户申请读/写锁时,包括以下步骤:
a1.互斥锁加锁;
b1.检查写/读锁等待计数器是否为零,如果为零,则优先类型标志置为读/写优先,允许读/写锁申请;
c1.检查锁状态条件,如果锁引用计数器小于0或优先类型标志为写/读优先条件成立,则执行读/写等待条件锁等待操作,等待允许读/写的条件信号,当信号触发时,跳转至b1步骤循环执行;如果锁引用计数器小于0或优先类型标志为写/读优先条件不成立,则申请读/写锁成功,流程跳转至d1步骤;
d1.当成功申请读时,锁引用计数器加1,成功申请写锁时,锁引用计数器置为-1;
e1.如果读/写锁最大允许数计数器大于0,则读/写锁最大允许数计数器减1;
f1.如果读/写锁最大允许数计数器等于0,则此时优先类型标志S109置为写/读优先;
g1.互斥锁解锁,完成读/写锁申请。
作为本发明的进一步改进,当用户尝试申请读/写锁时,包括以下步骤:
a2.定义读/写锁申请成功标志变量,并置为1,表示初始值为尝试申请读/写锁成功;
b2.互斥锁加锁;
c2.检查锁状态,如果锁引用计数器小于0,或优先类型标志为写/读优先,则读/写锁申请成功标志变量置为0,表示尝试申请读/写锁失败,并跳转到g2步骤;
d2.如果c2步骤条件不成立,则表示尝试申请读/写锁成功,此时锁引用计数器加1;
e2.如果读/写锁最大允许数计数器大于0,则读/写锁最大允许数计数器减1;
f2.如果读/写锁最大允许数计数器等于0,则此时优先类型标志置为写/读优先;
g2.互斥锁S101解锁;
h2.返回读/写锁申请是否成功的标志。
5.根据权利要求1所述的一种数据读写优先平衡方法,其特征在于,当用户释放读/写锁时,包括以下步骤:
a3.互斥锁加锁;
b3.释放读时锁引用计数器减1,释放写锁时锁引用计数器置0;
c3.检查如果读/写锁最大允许数计数器为0,并且写/读锁等待计数器大于0时,该步骤执行条件成立,再检查如果锁引用计数器为0,则优先类型标志置为写/读优先,写/读锁最大允许数计数器置为写/读锁等待计数器的值,表示本次写/读优先最大可触发写/读锁最大允许数计数器值次数的写/读操作后再进行优先级别的翻转,然后向写/读等待条件锁发一个触发信号;
d3.如果c3步骤条件不成立,则检查读/写锁等待计数器是否大于0,如果是,则将优先类型标志置为读/写优先,并向读/写等待条件锁发起广播信号,允许所有读/写锁申请;
e3.如果d步骤条件不成立,则表示当前无读/写锁和写/读锁等待,则优先类型标志置为无优先级,等待读写锁申请;
f3.互斥锁解锁,完成释放读/写锁。
作为本发明的进一步改进,读写锁创建时,同时创建互斥锁、读等待条件锁和写等待条件锁对象,读锁等待计数器、读锁最大允许数计数器、写锁等待计数器、写锁最大允许数计数器、锁引用计数器、优先类型标志全部置为0,表示读写锁的初始状态为无读写优先、无读写等待、无读写锁占用状态;
读写锁销毁时,释放互斥锁、读等待条件锁和写等待条件锁对象,读锁等待计数器、读锁最大允许数计数器、写锁等待计数器、写锁最大允许数计数器、锁引用计数器、优先类型标志全部置为0;
一种数据读写优先平衡***,包括:
互斥锁单元,用于通过互斥锁为数据读写请求并发安全访问相关变量加锁或解锁;
优先类型标志单元,用于根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
引用计数器单元,用于根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
锁控制单元,用于根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志。
所述锁控制单元包括:
等待条件锁单元,用于根据优先级类型标志等待允许的条件信号;
等待计数器单元,用于判断当前变量的优先类型标志;
最大允许数计数器单元,用于判断当前变量的优先类型标志的最大允许数。
一种数据读写优先平衡装置,所述优先平衡装置包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现所述一种数据读写优先平衡方法。
一种存储介质,其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于实现所述一种数据读写优先平衡方法。
与现有技术相比,本发明具有以下优点:
本发明在一般的读写锁的基础上,引入读写优先级类型标志和读/写锁最大允许数计数器变量,通过对当前读写锁的读写占用情况和读写等待情况进行综合考量,实现读写优先级动态平衡调度,解决一般读写锁在读写并发随机波动大的场景下容易因为读写饥饿造成死锁的问题,从而扩大了读写锁的适用范围,即使是读写并发不确定,有时读并发量远大于写并发量,而有时又是写并发量远大于读并发量,而且它们出现的概率和时机无法预知的服务器应用场景中,也可以通过使用本发明提高服务的读并发性能。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示除了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为读写优先平衡锁结构设计图;
图2为申请读锁时的执行处理流程图;
图3为尝试申请读锁时的执行处理流程图;
图4为释放读锁时的执行处理流程图;
图5为申请写锁时的执行处理流程图;
图6为尝试申请写锁时的执行处理流程图;
图7为释放写锁时的执行处理流程图;
图8为读写优先平衡锁的实施接口示例图;
图9为读写优先平衡锁的实施示例图。
具体实施方式
为使本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
本发明一种数据读写优先平衡方法,包括:
通过互斥锁为数据读写的优先级类型标志变量、计数器变量和读/写条件锁并发安全访问加锁;;
根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志;
通过互斥锁为请求数据读写操作解锁。
本发明读写优先平衡锁结构设计如下:
1)一个互斥锁(见图1中的互斥锁S101),为读等待条件锁和写等待条件锁及其他变量访问提供线程安全保护;
2)一个读等待条件锁(见图1中的读等待条件锁S102)、一个读锁等待计数器(见图1中的读锁等待计数器S103)和一个读锁最大允许数计数器(见图1中的读锁最大允许数计数器S104)组成读锁控制单元;
3)一个写等待条件锁(见图1中的写等待条件锁S105)、一个写锁等待计数器(见图1中的写锁等待计数器S106)和一个写锁最大允许数计数器(见图1中的写锁最大允许数计数器S107)组成写锁控制单元;
4)一个锁引用计数器(见图1中的锁引用计数器S108),当该计数器值大于0时,表示有多少个读锁占用,-1时表示为写锁独占,而0表示没有任何锁占用;
5)一个优先类型标志(见图1中的优先类型标志S109),0表示无读写优先,1表示读优先,2表示写优先,读写优先平衡锁通过该变量控制锁的优先级,实现动态的优先级平衡调度。
基于以上的读写锁结构,本发明对外部输出8个接口,并采用以下的技术方案实现一种读写优先平衡锁:
1)该读写锁创建时,同时创建互斥锁S101、读等待条件锁S102和写等待条件锁S105对象实例,读锁等待计数器S103、读锁最大允许数计数器S104、写锁等待计数器S106、写锁最大允许数计数器S107、锁引用计数器S108、优先类型标志S109全部置为0,表示读写锁的初始状态为无读写优先、无读写等待、无读写锁占用状态。
2)该读写锁销毁时,释放互斥锁S101、读等待条件锁S102和写等待条件锁S105对象实例,读锁等待计数器S103、读锁最大允许数计数器S104、写锁等待计数器S106、写锁最大允许数计数器S107、锁引用计数器S108、优先类型标志S109全部置为0;
3)当用户申请读锁时,执行以下处理流程:
a.互斥锁S101加锁进行操作保护;
b.检查写锁等待计数器S106是否为零,如果为零,则优先类型标志S109置为读优先,允许读锁申请;
c.检查锁状态条件,如果锁引用计数器S108小于0或优先类型标志S109为写优先条件成立,则执行读等待条件锁S102等待操作,等待允许读的条件信号,当信号触发时,跳转至b步骤循环执行;如果锁引用计数器S108小于0或优先类型标志S109为写优先条件不成立,则申请读锁成功,流程跳转至d步骤;
d.当成功申请读锁时,锁引用计数器S108加1;
e.如果读锁最大允许数计数器S104大于0,则读锁最大允许数计数器S104减1;
f.如果读锁最大允许数计数器S104等于0,则此时优先类型标志S109置为写优先;
g.互斥锁S101解锁,完成读锁申请。
4)当用户尝试申请读锁时,执行以下处理流程:
a.定义读锁申请成功标志变量,并置为1,表示初始值为尝试申请读锁成功;
b.互斥锁加锁进行操作保护;
c.检查锁状态,如果锁引用计数器S108小于0,或优先类型标志S109为写优先,则读锁申请成功标志变量置为0,表示尝试申请读锁失败,并跳转到g步骤;
d.如果c步骤条件不成立,则表示尝试申请读锁成功,此时锁引用计数器S108加1;
e.如果读锁最大允许数计数器S104大于0,则读锁最大允许数计数器S104减1;
f.如果读锁最大允许数计数器S104等于0,则此时优先类型标志S109置为写优先;
g.互斥锁S101解锁;
h.返回读锁申请是否成功的标志。
5)当用户释放读锁时,执行以下处理流程:
a.互斥锁S101加锁进行操作保护;
b.锁引用计数器S108减1;
c.检查如果读锁最大允许数计数器S104为0,并且写锁等待计数器S106大于0时,该步骤执行条件成立,再检查如果锁引用计数器S108为0,则优先类型标志S109置为写优先,写锁最大允许数计数器S107置为写锁等待计数器S106的值,表示本次写优先最大可触发写锁最大允许数计数器S107值次数的写操作后再进行优先级别的翻转,然后向写等待条件锁S105发一个触发信号;
d.如果c步骤条件不成立,则检查读锁等待计数器S103是否大于0,如果是,则将优先类型标志S109置为读优先,并向读等待条件锁S102发起广播信号,允许所有读锁申请;
e.如果d步骤条件不成立,则表示当前无读锁和写锁等待,则优先类型标志S109置为无优先级,等待读写锁申请;
f.互斥锁S101解锁,完成释放读锁。
6)当用户申请写锁时,执行以下处理流程:
a.互斥锁S101加锁进行操作保护;
b.检查读锁等待计数器S103是否为零,如果为零,则优先类型标志S109置为写优先,允许写锁申请;
c.检查锁状态条件,如果锁引用计数器S108不为0或优先类型标志S109读优先条件成立,则执行写等待条件锁S105等待操作,等待允许写的条件信号,当信号触发时,跳转至b步骤循环执行;如果锁引用计数器S108不为0或优先类型标志S109读优先条件不成立,则表示写锁申请成功,流程跳转至d步骤;
d.当成功申请写锁时,锁引用计数器S108置为-1;
e.如果写锁最大允许数计数器S107大于0,则写锁最大允许数计数器S107减1;
f.如果写锁最大允许数计数器S107等于0,则此时优先类型标志S109置为读优先;
a.互斥锁S101解锁,完成读锁申请。
7)当用户尝试申请写锁时,执行以一处理流程:
a.定义写锁申请成功标志变量,并置为1,表示初始值为尝试申请写锁成功;
b.互斥锁S101加锁进行操作保护;
c.检查锁状态,如果锁引用计数器S108不为0,或优先类型标志S109为读优先,则写锁申请成功标志变量置为0,表示尝试申请写锁失败,并跳转到g步骤;
d.如果c步骤条件不成立,则表示尝试申请写锁成功,此时锁引用计数器S108置为-1;
e.如果写锁最大允许数计数器S107大于0,则写锁最大允许数计数器S107减1;
f.如果写锁最大允许数计数器S107等于0,则此时优先类型标志S109置为读优先;
g.互斥锁S101解锁;
h.返回读锁申请是否成功标志;
8)当用户释放写锁时,执行以下处理流程:
a.互斥锁S101加锁进行操作保护;
b.锁引用计数器S108置为0;
c.检查如果写锁最大允许数计数器S107为0,并且读锁等待计数器S103大于0时,该步骤执行条件成立,则优先类型标志S109置为读优先,读锁最大允许数计数器S104置为读锁等待计数器S103的值,表示本次读优先最大可触发读锁最大允许数计数器S104值次数的读操作后再进行优先级别的翻转,然后向读等待条件锁S102发起广播信号;
d.如果c步骤条件不成立,则检查写锁等待计数器S106是否大于0,如果是,则将优先类型标志S109置为写优先,并向写等待条件锁S105发起一个触发信号,允许写锁申请;
e.如果d步骤条件不成立,则表示当前无读锁和写锁等待,则优先类型标志S109置为无优先级,等待读写锁申请;
f.互斥锁S101解锁,完成释放读锁。
下面结合具体实施方式和附图对本发明作进一步详细说明。
本发明一种数据读写优先平衡***,包括:
互斥锁单元,用于通过互斥锁为数据读写的优先级类型标志变量、计数器变量和读/写条件锁并发安全访问加锁;
优先类型标志单元,根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
引用计数器单元,根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
锁控制单元,根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志。
所述锁控制单元包括:
等待条件锁单元,用于根据优先级类型标志等待允许的条件信号;
等待计数器单元,用于判断当前数据读写的优先类型标志;
最大允许数计数器单元,用于判断当前数据读写的优先类型标志的最大允许数。
本发明在一种可能的实施方式中,所述生读写优先平衡锁模块800对外输出以下8个接口(可见图8):
1)接口801,创建一个模块800实例,并创建互斥锁S101、读等待条件锁S102和写等待条件锁S105对象实例,读锁等待计数器S103、读锁最大允许数计数器S104、写锁等待计数器S106、写锁最大允许数计数器S107、锁引用计数器S108、优先类型标志S109全部置为0,表示读写锁的初始状态为无读写优先、无读写等待、无读写锁占用状态。
2)接口802,销毁一个模块800实例,并释放互斥锁S101、读等待条件锁S102和写等待条件锁S105对象实例,读锁等待计数器S103、读锁最大允许数计数器S104、写锁等待计数器S106、写锁最大允许数计数器S107、锁引用计数器S108、优先类型标志S109全部置为0;
3)接口803,按图2的执行流程为用户实现一个申请读锁操作;
4)接口804,按图3的执行流程为用户实现一个尝试申请读锁操作;
5)接口805,按图4的执行流程为用户实现一个释放读锁操作;
6)接口806,按图5的执行流程为用户实现一个申请写锁操作;
7)接口807,按图6的执行流程为用户实现一个尝试申请写锁操作;
8)接口808,按图7的执行流程为用户实现一个释放写锁操作;
所述读写优先平衡锁基于C语言开发,对外输出一个.h头文件和一个.c源代码文件,非常便于被其他***模块引用,如果对其进行动态库封装,也可以被其他编程语言调用。同时该读写锁支持不同操作***,实现跨平台应用,能够在Windows、Linux以及其他类Unix平台下工作,也可应用于国产化操作***,具有广泛的应用前景。
本发明在睿腾实时数据库***的多个模块中得到应用,并取得了很好的读并发性能提升。
在其中一个特定的应用实例中,需要针对睿腾实时数据库***中每个测点的历史缓存数据块进行读写并发多线程访问保护。在睿腾实时数据库***中,测点的历史缓存数据块是一个测点的快照数据和历史存档数据的中间层数据缓存区,快照数据归档后先存放在历史缓存数据块中,当历史缓存数据块满后,再将该历史缓存数据块归档写到磁盘文件,这样利用内存的高速读写性能来提高睿腾实时数据库***的归档性能,并可使得测点的最近一段热数据具有高速读性能。
测点的历史缓存数据块明显满足一个读写锁的应用条件,允许同时并发多个读操作,但只允许一个独占的写操作。但它也同时存在如图9所示的一种特殊的并发特性:有时这个测点会被高并发的执行902操作,这一操作允许在申请901锁实例的读锁后同时并发执行,而有时,这个测点会因为903和904操作需要申请901锁实例的写锁后被独占执行写操作,读写操作的峰值都是动态变化而不可预知的,而且有时波动非常大。
在睿腾实时数据库***设计之初,采用保守的互斥锁进行数据读写访问保护,***可以很好的工作,但当同时并发多个读操作时,互斥锁无法实现读并发,这样当读并发越多时,读操作的性能越差。后来采用pthread的读写锁pthread_rwlock_t代替互斥锁,测试结果读并发性能明显提高,看起来一切都很完美,但经过长时间高强度的压力测试过程中发现,数据库有时会莫名其妙的发生死锁,造成数据库无响应,即使使用pthread_rwlockattr_setkind_np()函数切换读写锁的读写优先级也无法避免死锁的发生。
为此提出本发明技术方案,由于其可以根据读写并发性进行动态调整锁的读写优先级,进行读写优先平衡调度,本发明可以很好的规避读写饥饿造成死锁的问题。睿腾实时数据库***自从使用读写优先平衡锁后,历史缓存数据块的读并发性能和使用pthread_rwlock_t的测试性能相当,但经过长时间高强度的测试从未发生过死锁的情况。
目前,应用本发明技术方案的睿腾实时数据库***已经在多个电厂的SIS项目中部署运行,承载着全厂海量的生产数据的存储和访问,***长期运行稳定,数据高并发访问性能优良,取得了很好的经济效应。
本申请实施例提供的一种数据读写优先平衡装置。该装置可以是智能手机、平板电脑等能够运行应用程序的电子设备,或是服务器。本申请中的一种数据读写优先平衡装置,所述优先平衡装置包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现所述一种数据读写优先平衡方法。
处理器可以包括一个或者多个处理核。处理器利用各种接口和线路连接整个电子设备内的各个部分,通过运行或执行存储在存储器内的指令、程序、代码集或指令集,以及调用存储在存储器内的数据,执行电子设备的各种功能和处理数据。可选地,处理器可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作***、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器中,单独通过一块通信芯片进行实现。
存储器可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器可用于存储指令、程序、代码、代码集或指令集。存储器可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作***的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
本申请实施例提供的一种计算机可读存储介质的结构。其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于实现所述一种数据读写优先平衡方法。
计算机可读存储介质可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质具有执行上述方法中的任何方法步骤的程序代码的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (6)
1.一种数据读写优先平衡方法,其特征在于,包括:
通过互斥锁为数据读写的优先级类型标志变量、计数器变量和读/写条件锁并发安全访问加锁;
根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志;
通过互斥锁为请求数据读写操作解锁;
所述请求数据读写操作包括申请读锁请求、尝试申请读锁请求、释放读锁请求、申请写锁请求、尝试申请写锁请求和释放写锁请求;
当用户申请读锁时,包括以下步骤:
a1.互斥锁加锁;
b1.检查写锁等待计数器是否为零,如果为零,则优先类型标志置为读优先,允许读锁申请;
c1.检查锁状态条件,如果锁引用计数器小于0或优先类型标志为写优先条件成立,则执行读等待条件锁等待操作,等待允许读的条件信号,当信号触发时,跳转至b1步骤循环执行;如果锁引用计数器小于0或优先类型标志为写优先条件不成立,则申请读锁成功,流程跳转至d1步骤;
d1.当成功申请读锁时,锁引用计数器加1;
e1.如果读锁最大允许数计数器大于0,则读锁最大允许数计数器减1;
f1.如果读锁最大允许数计数器等于0,则此时优先类型标志置为写优先;
g1.互斥锁解锁,完成读锁申请;
当用户申请写锁时,包括以下步骤:
a1.互斥锁加锁;
b1.检查读锁等待计数器是否为零,如果为零,则优先类型标志置为写优先,允许写锁申请;
c1.检查锁状态条件,如果锁引用计数器小于0或优先类型标志为读优先条件成立,则执行写等待条件锁等待操作,等待允许写的条件信号,当信号触发时,跳转至b1步骤循环执行;如果锁引用计数器小于0或优先类型标志为读优先条件不成立,则申请写锁成功,流程跳转至d1步骤;
d1.当成功申请写锁时,锁引用计数器置为-1;
e1.如果写锁最大允许数计数器大于0,则写锁最大允许数计数器减1;
f1.如果写锁最大允许数计数器等于0,则此时优先类型标志置为读优先;
g1.互斥锁解锁,完成写锁申请;
当用户尝试申请读锁时,包括以下步骤:
a2.定义读锁申请成功标志变量,并置为1,表示初始值为尝试申请读锁成功;
b2.互斥锁加锁;
c2.检查锁状态,如果锁引用计数器小于0,或优先类型标志为写优先,则读锁申请成功标志变量置为0,表示尝试申请读锁失败,并跳转到g2步骤;
d2.如果c2步骤条件不成立,则表示尝试申请读锁成功,此时锁引用计数器加1;
e2.如果读锁最大允许数计数器大于0,则读锁最大允许数计数器减1;
f2.如果读锁最大允许数计数器等于0,则此时优先类型标志置为写优先;
g2.互斥锁解锁;
h2.返回读锁申请是否成功的标志;
当用户尝试申请写锁时,包括以下步骤:
a2.定义写锁申请成功标志变量,并置为1,表示初始值为尝试申请写锁成功;
b2.互斥锁加锁;
c2.检查锁状态,如果锁引用计数器小于0,或优先类型标志为读优先,则写锁申请成功标志变量置为0,表示尝试申请写锁失败,并跳转到g2步骤;
d2.如果c2步骤条件不成立,则表示尝试申请写锁成功,此时锁引用计数器加1;
e2.如果写锁最大允许数计数器大于0,则写锁最大允许数计数器减1;
f2.如果写锁最大允许数计数器等于0,则此时优先类型标志置为读优先;
g2.互斥锁解锁;
h2.返回写锁申请是否成功的标志;
当用户释放读锁时,包括以下步骤:
a3.互斥锁加锁;
b3.释放读锁时锁引用计数器减1;
c3.检查如果读锁最大允许数计数器为0,并且写锁等待计数器大于0时,该步骤执行条件成立,再检查如果锁引用计数器为0,则优先类型标志置为写优先,写锁最大允许数计数器置为写锁等待计数器的值,表示本次写优先最大可触发写锁最大允许数计数器值次数的写操作后再进行优先级别的翻转,然后向写等待条件锁发一个触发信号;
d3.如果c3步骤条件不成立,则检查读锁等待计数器是否大于0,如果是,则将优先类型标志置为读优先,并向读等待条件锁发起广播信号,允许所有读锁申请;
e3.如果d3步骤条件不成立,则表示当前无读锁和写锁等待,则优先类型标志置为无优先级,等待读写锁申请;
f3.互斥锁解锁,完成释放读锁;
当用户释放写锁时,包括以下步骤:
a3.互斥锁加锁;
b3.释放写锁时锁引用计数器置0;
c3.检查如果写锁最大允许数计数器为0,并且读锁等待计数器大于0时,该步骤执行条件成立,再检查如果锁引用计数器为0,则优先类型标志置为读优先,读锁最大允许数计数器置为读锁等待计数器的值,表示本次读优先最大可触发读锁最大允许数计数器值次数的读操作后再进行优先级别的翻转,然后向读等待条件锁发一个触发信号;
d3.如果c3步骤条件不成立,则检查写锁等待计数器是否大于0,如果是,则将优先类型标志置为写优先,并向写等待条件锁发起广播信号,允许所有写锁申请;
e3.如果d3步骤条件不成立,则表示当前无写锁和读锁等待,则优先类型标志置为无优先级,等待读写锁申请;
f3.互斥锁解锁,完成释放写锁。
2.根据权利要求1所述的一种数据读写优先平衡方法,其特征在于,
读写锁创建时,同时创建互斥锁、读等待条件锁和写等待条件锁对象,读锁等待计数器、读锁最大允许数计数器、写锁等待计数器、写锁最大允许数计数器、锁引用计数器、优先类型标志全部置为0,表示读写锁的初始状态为无读写优先、无读写等待、无读写锁占用状态;
读写锁销毁时,释放互斥锁、读等待条件锁和写等待条件锁对象,读锁等待计数器、读锁最大允许数计数器、写锁等待计数器、写锁最大允许数计数器、锁引用计数器、优先类型标志全部置为0。
3.一种数据读写优先平衡***,其特征在于,基于权利要求1或2所述一种数据读写优先平衡方法,包括:
互斥锁单元,用于通过互斥锁为数据读写请求并发安全访问相关变量加锁或解锁;
优先类型标志单元,用于根据数据的读写引用计数器判断数据的读写优先级类型标志,包括无读写优先、读优先、写优先;
引用计数器单元,用于根据数据的读写引用计数器判断数据的读写占用情况,包括读锁占用、写锁独占和没有任何锁占用;
锁控制单元,用于根据数据的读写等待情况与最大允许数计数器剩余值得到数据的读写优先级类型标志。
4.根据权利要求3所述的一种数据读写优先平衡***,其特征在于,所述锁控制单元包括:
等待条件锁单元,用于根据优先级类型标志等待允许的条件信号;
等待计数器单元,用于判断当前变量的优先类型标志;
最大允许数计数器单元,用于判断当前变量的优先类型标志的最大允许数。
5.一种数据读写优先平衡装置,其特征在于,所述优先平衡装置包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1或2所述一种数据读写优先平衡方法。
6.一种存储介质,其中存储有处理器可执行的指令,其特征在于:所述处理器可执行的指令在由处理器执行时用于实现如权利要求1或2所述一种数据读写优先平衡方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011325771.XA CN112416556B (zh) | 2020-11-23 | 2020-11-23 | 一种数据读写优先平衡方法、***、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011325771.XA CN112416556B (zh) | 2020-11-23 | 2020-11-23 | 一种数据读写优先平衡方法、***、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416556A CN112416556A (zh) | 2021-02-26 |
CN112416556B true CN112416556B (zh) | 2023-10-20 |
Family
ID=74777011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011325771.XA Active CN112416556B (zh) | 2020-11-23 | 2020-11-23 | 一种数据读写优先平衡方法、***、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416556B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113010325B (zh) * | 2021-03-16 | 2023-07-25 | 北京百度网讯科技有限公司 | 一种读写锁的实现方法、装置及电子设备 |
CN113590560A (zh) * | 2021-06-29 | 2021-11-02 | 济南浪潮数据技术有限公司 | 一种分布式***的缓存优化方法、***、设备和存储介质 |
CN114327642A (zh) * | 2021-12-31 | 2022-04-12 | 深圳市兆珑科技有限公司 | 一种数据读写的控制方法及电子设备 |
CN117971137B (zh) * | 2024-04-02 | 2024-06-04 | 山东海润数聚科技有限公司 | 一种基于多线程的大规模向量数据一致性的评估方法和*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107807858A (zh) * | 2017-10-30 | 2018-03-16 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁操作方法及***、设备 |
CN110704198A (zh) * | 2018-07-10 | 2020-01-17 | 阿里巴巴集团控股有限公司 | 数据操作方法、装置、存储介质以及处理器 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8799591B2 (en) * | 2007-01-30 | 2014-08-05 | Hewlett-Packard Development Company, L.P. | Read-write spinlock |
US9329895B2 (en) * | 2014-01-22 | 2016-05-03 | International Business Machines Corporation | Reader-writer lock |
CN109271258B (zh) * | 2018-08-28 | 2020-11-17 | 百度在线网络技术(北京)有限公司 | 读写锁重入的实现方法、装置、终端及存储介质 |
-
2020
- 2020-11-23 CN CN202011325771.XA patent/CN112416556B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107807858A (zh) * | 2017-10-30 | 2018-03-16 | 北京神州绿盟信息安全科技股份有限公司 | 一种读写锁操作方法及***、设备 |
CN110704198A (zh) * | 2018-07-10 | 2020-01-17 | 阿里巴巴集团控股有限公司 | 数据操作方法、装置、存储介质以及处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN112416556A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112416556B (zh) | 一种数据读写优先平衡方法、***、装置及存储介质 | |
EP3701377B1 (en) | Method and apparatus for updating shared data in a multi-core processor environment | |
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
Dechev et al. | Understanding and effectively preventing the ABA problem in descriptor-based lock-free designs | |
US8769546B2 (en) | Busy-wait time for threads | |
US10929201B2 (en) | Method and system for implementing generation locks | |
TWI695319B (zh) | 用於執行複數個執行緒之資料處理設備中之共享資源 | |
CN110597640A (zh) | 进程间的数据传输方法、装置、终端及计算机存储介质 | |
CN106681836B (zh) | 一种信号量的创建方法及装置 | |
Dechev | The ABA problem in multicore data structures with collaborating operations | |
CN113010325B (zh) | 一种读写锁的实现方法、装置及电子设备 | |
US9569265B2 (en) | Optimization of data locks for improved write lock performance and CPU cache usage in multi core architectures | |
US20110145515A1 (en) | Method for modifying a shared data queue and processor configured to implement same | |
US9582340B2 (en) | File lock | |
US8161250B2 (en) | Methods and systems for partially-transacted data concurrency | |
US9021483B2 (en) | Making hardware objects and operations thread-safe | |
CN110908968B (zh) | 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质 | |
CN111984428A (zh) | 一种资源访问时自旋锁的实现方法、装置及设备 | |
US9507817B2 (en) | Method for synchronizing access to shared resources of a computing system and detecting and eliminating deadlocks using lock files | |
US10310916B2 (en) | Scalable spinlocks for non-uniform memory access | |
US9081630B2 (en) | Hardware-implemented semaphore for resource access based on presence of a memory buffer in a memory pool | |
CN115774724A (zh) | 并发请求的处理方法、装置、电子设备及存储介质 | |
EP1826671B1 (en) | Interruptible thread synchronization method and apparatus | |
US7447875B1 (en) | Method and system for management of global queues utilizing a locked state | |
CN110837422A (zh) | 多线程访问方法、***、电子终端以及储存介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |