切换多线程程序中的对象锁定模式的方法和系统的制作方法

文档序号:6492019阅读:171来源:国知局
切换多线程程序中的对象锁定模式的方法和系统的制作方法
【专利摘要】本发明公开了一种切换多线程程序中的对象的锁定模式的方法和系统。该方法包括:在程序运行期间,获取与多个线程对该对象的访问有关的访问信息,其中,所述对象支持单级锁定模式和多级锁定模式,单级锁定模式是能够锁定该对象的模式,多级锁定模式是能够分别锁定该对象以及该对象中的字段的模式;以及基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式。由此,可以根据多线程程序在运行期间的状态自适应地调整程序中的对象的锁定模式,简化了开发者的程序设计工作,并且能够提高多线程程序的性能。
【专利说明】切换多线程程序中的对象锁定模式的方法和系统
【技术领域】
[0001]本发明涉及多线程程序中的对象的锁定,更具体地,涉及一种切换多线程程序中的对象的锁定模式的方法和系统。
【背景技术】
[0002]随着计算机硬件技术的发展,已经开发出集成了多个处理器核的多核芯片以及使用这种多核芯片的处理系统,例如计算机等。此外,为了加快程序执行速度,提出了同步多线程(SMT)技术,使得每个处理器核能够支持多个线程。因此,一个处理系统可以同时运行很多线程。为了充分利用这种处理系统的处理能力,在该处理系统上运行的程序也被多线程化。
[0003]当运行多线程程序时,同时存在多个线程,它们根据需要访问程序中的各种对象,例如函数、语句块或数据结构等,并且在不使用这些对象时释放它们。可能出现多个线程同时访问同一个对象(以下称为竞争访问)的情况,从而产生冲突。为了应对对于对象的竞争访问,可以对该对象应用锁定机制。
[0004]传统上,按照锁定的粒度,应用于对象的锁定机制可以分为粗粒度锁定模式和细粒度锁定模式,粗粒度锁定模式是以例如对象等较粗粒度进行锁定的模式,细粒度锁定模式是以例如对象的字段等较细的粒度进行锁定的模式。按照锁定的层级,应用于对象的锁定机制可分为单级锁定模式和多级锁定模式,单级锁定模式是以一个层级进行锁定的模式,例如仅在对象的层级上进行锁定的锁定模式,多级锁定模式是以多个层级进行锁定的模式,例如在对象以及对象的字段两个层级上分别进行锁定的模式。
[0005]下面的代码段I给出了采用单级锁定模式的对象(类“MusicRack”)的示例,其中,“Lock MusicRackLock”定义了针对该对象的锁(对象级锁)。
`[0006][代码段I]
[0007]

Class MusicRack{

Lock MusicRackLock;

int MusicCount; List topSelection;...[0008]


List MusicTrackl;


List MusicTrack2;...}
[0009] 下面的代码段2给出了采用多级锁定模式的对象(类“MusicRack”)的示例,其中,“ReadWriteLock MusicRackLock”定义针对该对象的锁(对象级锁),“LockMusicTracklLock” 和 “Lock MusicTrack2Lock” 分别定义针对该对象的字段 “ListMusicTrackl” 和 “List MusicTrack2” 的锁(字段级锁)。[0010][代码段2]
[0011]
【权利要求】
1.一种切换多线程程序中的对象的锁定模式的方法,包括: 在程序运行期间,获取与多个线程对该对象的访问有关的访问信息,其中,该对象支持单级锁定模式和多级锁定模式,单级锁定模式是能够锁定该对象的模式,多级锁定模式是能够分别锁定该对象以及该对象中的字段的模式;以及 基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式。
2.如权利要求1所述的方法,其中,所述对象是在多线程程序中预先标注的对象。
3.如权利要求1所述的方法,其中,通过修改所述对象的代码来使得所述对象支持单级锁定模式和多级锁定模式。
4.如权利要求3所述的方法,其中,修改后的对象的代码包括:针对该对象的锁的定义和针对该对象的字段的锁的定义;以及用于表示对象的当前锁定状态的锁定状态参数。
5.如权利要求4所述的方法,其中,所述访问信息包括所述多个线程对于该对象的总访问次数、所述多个线程对于该对象的竞争访问次数、以及所述多个线程的总等待时间,所述总等待时间是请求访问该对象的各个线程从由于对象被锁定而开始等待时起到获得该对象的访问权为止的等待时间的总和。
6.如权利要求5所述的方法,其中,基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式的步骤包括: 计算该对象的竞争率和平均等待时间,所述竞争率为竞争访问次数与总访问次数之比,所述平均等待时间为总等待时间与竞争访问次数之比,以及 在对象处于单级锁 定模式,并且竞争率超过第一比率阈值且平均等待时间超过第一时间阈值的情况下,将对象的锁定模式切换为多级锁定模式。
7.如权利要求6所述的方法,其中,将对象的锁定模式切换为多级锁定模式的步骤包括: 获取该对象的与访问权; 激活针对该对象的字段的锁; 将所述锁定状态参数修改为表示多级锁定模式的值;以及 释放该对象的写访问权。
8.如权利要求5所述的方法,其中,基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式的步骤还包括: 计算该对象的竞争率和平均等待时间,所述竞争率为竞争访问次数与总访问次数之比,所述平均等待时间为总等待时间与竞争访问次数之比,以及 在对象处于多级锁定模式的情况下,并且竞争率低于第二比率阈值且平均等待时间低于第二时间阈值时,将对象的锁定模式切换为单级锁定模式。
9.如权利要求8所述的方法,其中,将对象的锁定模式切换为单级锁定模式的步骤包括: 获取该对象的与访问权; 撤销针对该对象的字段的锁; 将所述锁定状态参数修改为表示单级锁定模式的值;以及 释放该对象的写访问权。
10.如权利要求1所述的方法,其中,周期性地或者响应于预定事件的发生,而执行基于该访问信息在单级锁定模式和多级锁定模式之间切换该对象的锁定模式的步骤。
11.一种切换多线程程序中的对象的锁定模式的系统,包括: 访问监视器,被配置为在程序运行期间,获取与多个线程对该对象的访问有关的访问信息,其中,所述对象支持单级锁定模式和多级锁定模式,单级锁定模式是能够锁定该对象的模式,多级锁定模式是能够分别锁定该对象以及该对象中的字段的模式;以及 锁定模式控制器,被配置为基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式。
12.如权利要求11所述的系统,其中,所述对象是在多线程程序中预先标注的对象。
13.如权利要求11所述的系统,其中,通过修改所述对象的代码来使得所述对象支持单级锁定模式和多级锁定模式。
14.如权利要求13所述的系统,其中,修改后的对象的代码包括:针对该对象的锁的定义和针对该对象的字段的锁的定义;以及用于表示对象的当前锁定状态的锁定状态参数。
15.如权利要求14所述的系统,其中,所述访问信息包括所述多个线程对于该对象的总访问次数、所述多个线程对于该对象的竞争访问次数、以及所述多个线程的总等待时间,所述总等待时间是请求访问该对象的各个线程从由于对象被锁定而开始等待时起到获得该对象的访问权为止的等待时间的总和。
16.如权利要求15所述的系统,其中,锁定模式控制器被配置为通过以下方式来基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式: 计算该对象的竞争率和·平均等待时间,所述竞争率为竞争访问次数与总访问次数之比,所述平均等待时间为总等待时间与竞争访问次数之比,以及 在对象处于单级锁定模式,并且竞争率超过第一比率阈值且平均等待时间超过第一时间阈值的情况下,将对象的锁定模式切换为多级锁定模式。
17.如权利要求16所述的系统,其中,锁定模式控制器被配置为通过以下方式将对象的锁定模式切换为多级锁定模式包括: 获取该对象的与访问权; 激活针对该对象的字段的锁; 将所述锁定状态参数修改为表示多级锁定模式的值;以及 释放该对象的写访问权。
18.如权利要求15所述的系统,锁定模式控制器被配置为通过以下方式来基于该访问信息,在单级锁定模式和多级锁定模式之间切换该对象的锁定模式: 计算该对象的竞争率和平均等待时间,所述竞争率为竞争访问次数与总访问次数之比,所述平均等待时间为总等待时间与竞争访问次数之比,以及 在对象处于多级锁定模式,并且竞争率低于第二比率阈值且平均等待时间低于第二时间阈值的情况下,将对象的锁定模式切换为单级锁定模式。
19.如权利要求18所述的系统,其中,锁定模式控制器被配置为通过以下方式将对象的锁定模式切换为单级锁定模式包括: 获取该对象的与访问权; 撤销针对该对象的字段的锁; 将所述锁定状态参数修改为表示单级锁定模式的值;以及释放该对象的写访问权。
20.如权利要求11所述的系统,其中,锁定模式控制器被配置为周期性地或者响应于预定事件的发生,而基于该访问信息在单级锁定模式和多级锁定模式之间切换该对象的锁定 模式。
【文档编号】G06F9/38GK103853527SQ201210500315
【公开日】2014年6月11日 申请日期:2012年11月29日 优先权日:2012年11月29日
【发明者】韩瑞波, 孙彬, 刘伟, 沙学府 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1