多个线程并行访问共享数据结构的方法及装置制造方法及图纸

技术编号:4243906 阅读:321 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种并行应用程序中的多个线程并行访问共享数据结构的方法,其包括:对所述多个线程中的一个线程授予所述共享数据结构的锁;对所述共享数据结构执行获得所述锁的线程的操作;缓存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述被缓存的操作。采用该方法,能够在共享数据结构被一个线程锁定时,自动缓存其它未获得共享数据结构的锁的线程的操作,并在另一个线程获得共享数据结构的锁的期间,执行所有被缓存的操作,从而在修改共享数据结构时显著减少共享数据结构中的元素移动的次数,提高多线程访问的性能。本发明专利技术还提供了一种相应的装置。

【技术实现步骤摘要】

本专利技术涉及用于多核体系结构的并行程序,具体地,涉及并行程序中 的多个线程并行访问共享数据结构的方法及装置
技术介绍
当前,微处理器技术正在从单核时代进入多核时代,多核处理器正在成为主流并且快速M。在多核处理器中,每一个CPU核都可支持多个线程。随着对多核处理器的计算能力的需求的增长,能够有效利用硬件并行 性的并行编程是最合适的方式。在并行计算中,通过对多核处理器中的多个CPU核(处理单元)进行编程以协同解决一个问题,能够提高计算速度。为了充分利用多核处理器,通常使用并行程序,即应用程序中包含并行处 理。在并行程序中,任务处理被分成多个部分(线程),这些线程可并行 地执行,并通过访问某些共享数据结构和使用合适的同步方法来彼此通信, 以协同并正确地工作。当并行程序在多核处理器上运行时,该并行程序中的多个线程可访问 共享数据结构,以对共享数据结构进行操作,例如,删除元素或增加元素。 当多个线程访问共享数据结构时,需要使用同步机制以确保每次只有一个 线程能够对共享数据结构进行操作,这可通过为线程授予共享数据结构的 锁来实现。当一个线程获得共享数据结构的锁时,其它线程都不能获得该 锁。获得锁的线程可对共享数据结构进行操作,并在结束操作后释放该锁, 然后由另 一个线程获得该锁以进行操作。在并行程序中,基于数组的数据结构被广泛应用,其中,数组是最常 用的。下面通过一个例子说明现有的多个线程访问共享数据结构的方案。图1示出了三个线程并行访问基于数组的列表的过程。如图1 (a)所示,列 表的位置0-3的元素分别是A 、 B,, 、 C和D,线程1的操 作是add(O, 'Y,),即在位置0处添加元素Y,线程2的操作是add(l, 'X,),即在位置1处添加元素X,线程3的操作是remove(l), 即删除位置l处的元素。首先,线程l获得该列表的锁,在列表的位置0 处添加元素Y,相应地,原本在位置0-3处的元素A,, 、 B,, 、 C,, 和D被移动到位置l-4处,如图1 (b)所示。然后,线程1释放锁, 由线程2获得该锁,线程2在列表的位置1处添加元素X,相应地, 原本在位置l-4处的元素A 、 B 、 C和D被移动到位置2-5 处,如图1 (c)所示。然后,线程2释方文锁,由线程3获得锁,线程3删 除位置1处的元素X,原本在位置2-5处的元素A 、 B,, 、 C 和D,,被移动到位置l-4处,如图1 (d)所示。通过以上过程可以看出, 每次线程对列表进行操作时,列表中的元素都将移动。在实际的应用程序 中,当多个线程频繁地修改数据结构时,会出现^^多的如上所述的元素移 动,这些元素移动的开销会降低整个多核处理器的性能。为了改善多核处理器的性能,提出了对多核处理器所使用的数据库采 用聚合写(Aggregate Write)的方案。聚合写在数据库、文件系统和并行 输入输出系统的设计中很普遍,它可改善并行应用程序在不同场景下的吞 吐量和延迟。在并行输入输出系统和文件系统中,在程序中的某个线程访 问存储器时,为了改善吞吐量和减少延迟,将要写入存储器的内容首先被 緩存在緩存器中,然后,该线程继续其工作而无需等待上述内容4皮写入实 际的存储器中。
技术实现思路
本专利技术正是鉴于上述的技术问题而提出的,其目的在于提供一种并行 应用程序中的多个线程并行访问共享数据结构的方法及装置,其能够在修 改共享数据结构时减少元素移动的次数,提高多线程访问的性能。根据本专利技术的一个方面,提供一种并行应用程序中的多个线程并行访问共享数据结构的方法,包括对所述多个线程中的一个线程授予所述共 享数据结构的锁;对所述共享数据结构执行获得所述锁的线程的操作;緩 存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线 程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结 构执行所緩存的操作。根据本专利技术的另一个方面,提供一种并行应用程序中的多个线程并行 访问共享数据结构的装置,包括锁授予模块,用于对所述多个线程中的 某个线程授予所述共享数据结构的锁;操作执行模块,用于对所述共享数 据结构执行操作;以及緩存模块,用于緩存所述多个线程中未获得所述锁 的线程的操作;其中,所述操作执行模块在所述多个线程中的一个线程获 得所述共享数据结构的锁的期间,对所述共享数据结构执行该线程的操作, 在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期 间,对所述共享数据结构执行所緩存的操作。附图说明图1是现有的多个线程并行访问列表的过程的示意图2是根据本专利技术的一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图3是使用图2所示的实施例的方法的多个线程并行访问列表的过程的示意图4是根据本专利技术的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图5是图4所示的实施例中合并所緩存的操作的步骤的流程图6是4艮据本专利技术的一个实施例的并行应用程序中的多个线程并行访 问共享数据结构的装置的方框图7是才艮据本专利技术的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的装置的方框图。具体实施例方式相信通过以下结合附图对本专利技术的具体实施例的详细描述,本专利技术的 上述和其它目的、特征和优点将更加明显。图2是根据本专利技术的一个实施例的并行应用程序中的多个线程并行访 问共享数据结构的方法的流程图。下面结合附图,对本实施例进行详细描 述。如图2所示,当多个线程并行访问一个共享数据结构时,在步骤S201, 每个线程请求获取用于锁定共享数据结构的锁,并仅对其中的一个线程授 予该共享数据结构的锁。在上述一个线程获得该锁的期间,在步骤S210, 对该共享数据结构执行该获得锁的线程的操作,并在步骤S220,緩存该多 个线程中其它未获得锁的线程的操作。在对共享数据结构执行了获得锁的 线程的操作之后,该获得锁的线程释放该锁。然后,在步骤S230,对多个 线程中的另一个线程授予该锁,并在该另一个线程获得锁的期间,对共享 数据结构执行所有所緩存的操作。在本实施例中,共享数据结构是基于数组的数据结构,例如,数组。 另外,线程的操作包括三种类型,分别是l)按值删除操作 (REMOVE—VALUE ),即删除共享数据结构中具有该值的元素;2)按 操作位置删除操作(REMOVE—INDEX),即删除共享数据结构中指定操 作位置的元素;以及按操作位置添加操作(ADD),即在共享数据结构中的指定操作位置添加元素。图3示出了使用图2所示的实施例的方法的多个线程并行访问列表的 过程。如图3 (a)所示,有三个线程要访问一个基于数组的列表,其中, 该列表在位置0-3处的元素是A 、 B,, 、 C,,和D,并且线程1 的操作是remove(l),线程2的操作是add(O, 'Y,),线程3的操作 是remove('B,)。首先,线程3获得该列表的锁,则对列表执行线程3 的操作,从列表中删除元素B,并緩存线程1和线程2的操作(如图3 (b)所示)。线程1和线程2等待线程3释放锁,当线程3释放了该列表9的锁后,线程2获得该锁,则对列表执行所緩存的线程1和线程2的操作, 从列表中删除位置1的元素,并在位置0处添加元素Y(如图3 ( c ) 所示本文档来自技高网
...

【技术保护点】
一种并行应用程序中的多个线程并行访问共享数据结构的方法,包括:    对所述多个线程中的一个线程授予所述共享数据结构的锁;    对所述共享数据结构执行获得所述锁的线程的操作;    缓存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述所缓存的操作。

【技术特征摘要】
1.一种并行应用程序中的多个线程并行访问共享数据结构的方法,包括对所述多个线程中的一个线程授予所述共享数据结构的锁;对所述共享数据结构执行获得所述锁的线程的操作;缓存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述所缓存的操作。2. 根据权利要求1所述的并行应用程序中的多个线程并行访问共享 数据结构的方法,还包括将所述所緩存的操作合并为复合操作。3. 根据权利要求1或2所述的并行应用程序中的多个线程并行访问 共享数据结构的方法,其中,所述操作是以下操作的任意一个按值删除 操作,即删除共享数据结构中具有所述值的元素;按操作位置删除操作, 即删除共享数据结构中指定操作位置的元素;以及按操作位置添加操作, 即在共享数据结构中的指定操作位置添加元素。4. 根据权利要求2或3所述的并行应用程序中的多个线程并行访问 共享数据结构的方法,其中,将所述所緩存的操作合并为复合操作的步骤 包括确定所述緩存的操作的每一个的优先级和操作位置;以及 按照所述緩存的操作的优先级和操作位置,对所述緩存的操作进行排序。5. 根据权利要求4所述的并行应用程序中的多个线程并行访问共享 数据结构的方法,其中,确定所述所緩存的操作的每一个的操作位置的步 骤包括确定每一个按值删除操作中的值在所述共享数据结构中的位置,作为 该按值删除操作的操作位置;以及确定每一个按操作位置删除操作和每一个按操作位置添加操作的操作位置。6. 根据权利要求4或5所述的并行应用程序中的多个线程并行访问 共享数据结构的方法,其中,将所述所緩存的操作合并为复合操作的步骤 还包括对排序后的所述所緩存的操作执行沖突检测和解决操作。7. 根据权利要求6所述的并行应用程序中的多个线程并行访问共享 数据结构的方法,其中,所述对排序后的所述所緩存的操作执行沖突检测 和解决操作的步骤包括检测所述排序后的操作中是否包含多个相同的M删除操作; 如果包含,则对所述多个相同的按值删除操作分配不同的操作位置; 删除未分配操作位置的按值删除操作;检测所述排序后的操作中是否包含多个所述操作位置相同的操作; 对于所述操作位置相同的操作,以第一个具有最高优先级的操作为当前操作,并以所述当前操作的操作位置为当前位置,将所述当前操作的下一个操作的操作位置调整为所述当前位置的后续位置;判断调整后的所述下一个操作的操作位置是否是所述共享数据结构的有效位置;如果是有效位置,则以所述下一个操作为当前操作,执行上述的位置 调整步骤和有效位置判断步骤;以及如果不是有效位置,则删除相应的操作以及剩余的操作。8. 根据权利要求3至7任意一项所述的并行应用程序中的多个线程 并行访问共享数据结构的方法,其中,所述按值删除操作的优先级高于所 述按操作位置删除操作的优先级,所述按操作位置删除操作的优先级高于 所述按操作位置添加操作的优先级。9. 根据权利要求1至8任意一项所述的并行应用程序中的多个线程 并行访问共享数据结构的方法,其中,所述共享数据结构是基于数组的。10. —种并行应用程序中的多个线程并行访问共享数据结构的装置, 包括锁授予模块,用于对所述多个线程中的某个线程授予所述共享数据结构的锁;操作执行模块,用于对所述共享数据结构执行线程的操作;以及 緩存模块,用于緩存所述多个线程中未获得所述锁的线程的操作; 其中...

【专利技术属性】
技术研发人员:甘志戴晓君邱模炯齐尧
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

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

1