System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种多核公平读写锁及其应用编程接口方法技术_技高网

一种多核公平读写锁及其应用编程接口方法技术

技术编号:40563468 阅读:18 留言:0更新日期:2024-03-05 19:26
本发明专利技术涉及一种多核公平读写锁及其应用编程接口方法,所述公平读写锁持有者集合,是多个reader,或者是一个writer,或者是多个reader加一个先读后写的dual role;所述hwr表示所述公平读写锁当前的状态集合,hwr.head表示首个排队申请的锁节点编号,hwr.w表示是否有writer占有所述公平读写锁,hwr.rc表示持有所述公平读写锁的reader数量;所述tail表示最后一个排队申请的锁节点编号;所述hwr.head和tail形成单向队列,新排队申请的锁节点通过tail加入所述hwr.head和tail队列尾;所述hwr.head和tail队列上的锁节点,只在本锁节点的waiting字段上自旋等待所述公平读写锁;所述公平读写锁持有者沿着所述hwr.head和tail队列向后传递所述公平读写锁。有益效果是用于读多写少场景,竞争公平、数据访问效率高、无cache污染问题。

【技术实现步骤摘要】

【】本专利技术涉及计算机软件,具体涉及一种多核公平读写锁及其应用编程接口方法


技术介绍

0、
技术介绍

1、在计算机、手机中,存在多个应用程序需要读写同一片存储空间的应用场景,比如手机中多个应用程序读写手机号码本,这是就需要编写读写锁或公平锁程序及其应用程序编程接口(api,application programming interface)。

2、在读多写少场景下,传统读写锁或公平锁存在以下一个或多个问题:

3、a.无序竞争,时序不可控,可能导致读者/写者饥饿,实时场景下,耗时无法估算(reader-writer lock);

4、b.竞争者在同一锁变量上自旋等待,cache(缓存)污染较严重(ticket-lock,reader-writer lock);

5、c.锁独占,读多写少场景的数据访问效率低(mcs-lock,clh-lock,ticket-lock);

6、d.api接口与原始读写锁不兼容,使用不方便(mcs-lock,clh-lock)。

7、在“scalable reader-writer synchronization for shared-memorymultiprocessors”,“a fair fast scalable reader-writer lock”等论文中,提到了公平读写锁的实现,但由于锁使用时间小于锁节点的生命周期,锁节点无法从栈上分配,引入预分配,附带增加了额外的性能开销和内存开销;api接口与传统读写锁不兼容,增加了锁节点参数,不能直接替换传统读写锁,尤其是锁的申请和释放位于不同函数,函数间需要额外传递锁节点参数。

8、论文“fair scalable reader-writer mutual exclusion”中,通过双向链表的复杂操作,解决了锁节点预分配的问题,可以从栈上分配,无额外内存开销。然而,双向链表复杂操作一定程度上会降低锁申请/释放的性能,栈上节点生命周期会导致使用场景受限(如锁不能在子函数申请父函数释放),另外仍存在api接口与传统读写锁不兼容的问题。

9、本专利技术针对读写锁或公平锁存在1、无序竞争,2、在同一锁变量上自旋等待,3、锁独占,4、api接口与原始读写锁不兼容的技术问题,对公平读写锁及其应用程序编程接口进行了技术改进。


技术实现思路

0、
技术实现思路

1、本专利技术的目的是,提供一种用于读多写少场景,竞争公平、数据访问效率高、无cache污染问题的公平读写锁。

2、为实现上述目的,本专利技术采取的技术方案是一种多核公平读写锁,对临界区数据的读操作并行、写操作独占,所有读写操作按请求时序执行;

3、所述公平读写锁持有者集合,是多个reader,或者是一个writer,或者是多个reader加一个先读后写的dual role;

4、所述公平读写锁数据结构用hwr和tail两个无符号长整型表示;所述hwr表示所述公平读写锁当前的状态集合,细分为三个子区域,hwr.head表示首个排队申请的锁节点编号,hwr.w表示是否有writer占有所述公平读写锁,w=0表示无writer占有,w=1表示有writer占有,hwr.rc表示持有所述公平读写锁的reader数量;所述tail表示最后一个排队申请的锁节点编号;

5、所述锁节点数据结构用role,waiting和next表示;所述role表示锁节点的角色,reader或者writer,dual role由应用编程接口区分、记为reader;所述waiting表示本锁节点是否在等待锁,waiting=1表示正在等待;所述next表示本锁节点后邻排队申请的锁节点编号;所述锁节点在排队申请所述公平读写锁等待过程使用,持有所述公平读写锁后释放;

6、所述hwr.head和tail形成单向队列,涵盖所有的锁节点编号、以及一个无效编号inval_id,新排队申请的锁节点通过tail加入所述hwr.head和tail队列尾;所述hwr.head和tail队列上的锁节点,只在本锁节点的waiting字段上自旋等待所述公平读写锁;所述公平读写锁持有者沿着所述hwr.head和tail队列向后传递所述公平读写锁。

7、优选地,所述公平读写锁持有者数量有上限时,从栈上分配锁节点。

8、优选地,所述hwr.rc占6bit,支持63个reader同时持有所述公平读写锁,所述hwr.w占1bit,所述所述hwr.rc+hwr.w占7bit,强制锁节点对齐到128b,锁节点地址低7bit为0,锁节点其他bit的值表示锁节点编号,得到索引关系:锁节点地址=锁节点编号左移7bit。

9、优选地,在percpu区域中预设锁节点;将cpuid作为锁节点编号,预设percpu的锁节点副本,得到的索引关系:锁节点地址=percpu base(cpuid)+offset。

10、本专利技术的又一目的是,提供一系列用于读多写少场景,竞争公平、数据访问效率高、无cache污染问题的公平读写锁应用编程接口方法。

11、为实现上述又一目的,本专利技术采取的技术方案是一种多核公平读写锁应用编程接口方法,基于权利要求1至权利要求4任一权利要求所述的一种多核公平读写锁,用于对临界区数据读多写少应用场合,应用程序通过所述公平读写锁竞争访问所述临界区数据。

12、优选地,一种多核公平读写锁应用编程接口reader加锁方法,包括以下步骤:

13、700、获取锁节点nd和锁节点编号id,并初始化为reader;

14、701、fas更新所述公平读写锁lock.tail为锁节点编号id,获取本锁节点前邻锁节点编号pred;

15、702、判断pred是否等于inval_id?若是执行710、若否执行703;

16、703、pred对应的锁节点next字段置为锁节点编号id;

17、704、等待所述公平读写锁传递到本锁节点,锁节点waiting字段置为0;

18、705、读取所述公平读写锁hwr.w,若hwr.w等于1执行706,若hwr.w不等于1执行712;

19、706、设置所述公平读写锁lock.hwr为<inval_id,0,1>;

20、707、cas更新lock.tail为inval_id,若假执行708,若真结束;

21、708、等待后邻锁节点链接到本锁节点后面,得到后邻锁节点编号nid;

22、718、后邻锁节点role=reader?若真向后邻锁节点传递所述公平读写锁后结束,若假设置lock.hwr为<nid,0,1>后结束;

23、710、读取lock.hwr,hwr.w=1?若真执行711,若假执行712;

24、711、cas更新lock.本文档来自技高网...

【技术保护点】

1.一种多核公平读写锁,对临界区数据的读操作并行、写操作独占,所有读写操作按请求时序执行;其特征在于:

2.根据权利要求1所述的一种多核公平读写锁,其特征在于:所述公平读写锁持有者数量有上限时,从栈上分配锁节点。

3.根据权利要求2所述的一种多核公平读写锁,其特征在于:所述hwr.rc占6bit,支持63个reader同时持有所述公平读写锁,所述hwr.w占1bit,所述所述hwr.rc+hwr.w占7bit,强制锁节点对齐到128B,锁节点地址低7bit为0,锁节点其他bit的值表示锁节点编号,得到索引关系:锁节点地址=锁节点编号左移7bit。

4.根据权利要求1所述的一种多核公平读写锁,其特征在于:在percpu区域中预设锁节点;将CPUID作为锁节点编号,预设percpu的锁节点副本,得到的索引关系:锁节点地址=percpu base(CPUID)+offset。

5.一种多核公平读写锁应用编程接口方法,其特征在于:基于权利要求1至权利要求4任一权利要求所述的一种多核公平读写锁,用于对临界区数据读多写少应用场合,应用程序通过所述公平读写锁竞争访问所述临界区数据。

6.根据权利要求5所述的一种多核公平读写锁应用编程接口reader加锁方法,其特征在于包括以下步骤:

7.根据权利要求5所述的一种多核公平读写锁应用编程接口reader解锁方法,其特征在于包括以下步骤:

8.根据权利要求5所述的一种多核公平读写锁应用编程接口writer加锁方法,其特征在于包括以下步骤:

9.根据权利要求5所述的一种多核公平读写锁应用编程接口writer解锁方法,其特征在于包括以下步骤:

10.根据权利要求5所述的一种多核公平读写锁应用编程接口dual role加锁方法,其特征在于包括以下步骤:

11.根据权利要求5所述的一种多核公平读写锁应用编程接口dual role解锁方法,其特征在于包括以下步骤:

12.根据权利要求5所述的一种多核公平读写锁应用编程接口dual role切换成writer方法,其特征在于包括以下步骤:

...

【技术特征摘要】

1.一种多核公平读写锁,对临界区数据的读操作并行、写操作独占,所有读写操作按请求时序执行;其特征在于:

2.根据权利要求1所述的一种多核公平读写锁,其特征在于:所述公平读写锁持有者数量有上限时,从栈上分配锁节点。

3.根据权利要求2所述的一种多核公平读写锁,其特征在于:所述hwr.rc占6bit,支持63个reader同时持有所述公平读写锁,所述hwr.w占1bit,所述所述hwr.rc+hwr.w占7bit,强制锁节点对齐到128b,锁节点地址低7bit为0,锁节点其他bit的值表示锁节点编号,得到索引关系:锁节点地址=锁节点编号左移7bit。

4.根据权利要求1所述的一种多核公平读写锁,其特征在于:在percpu区域中预设锁节点;将cpuid作为锁节点编号,预设percpu的锁节点副本,得到的索引关系:锁节点地址=percpu base(cpuid)+offset。

5.一种多核公平读写锁应用编程接口方法,其特征在于:基于权利要求1至权利要求4任一权利要求所述的一种多核...

【专利技术属性】
技术研发人员:朱伟朱韬姜辛
申请(专利权)人:合肥辉羲智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1