CN101685408A - 多个线程并行访问共享数据结构的方法及装置 - Google Patents
多个线程并行访问共享数据结构的方法及装置 Download PDFInfo
- Publication number
- CN101685408A CN101685408A CN200810161517.3A CN200810161517A CN101685408A CN 101685408 A CN101685408 A CN 101685408A CN 200810161517 A CN200810161517 A CN 200810161517A CN 101685408 A CN101685408 A CN 101685408A
- Authority
- CN
- China
- Prior art keywords
- data structure
- shared data
- thread
- operating position
- buffer memory
- 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.)
- Granted
Links
Images
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/522—Manager
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
Abstract
本发明提供一种并行应用程序中的多个线程并行访问共享数据结构的方法,其包括:对所述多个线程中的一个线程授予所述共享数据结构的锁;对所述共享数据结构执行获得所述锁的线程的操作;缓存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述被缓存的操作。采用该方法,能够在共享数据结构被一个线程锁定时,自动缓存其它未获得共享数据结构的锁的线程的操作,并在另一个线程获得共享数据结构的锁的期间,执行所有被缓存的操作,从而在修改共享数据结构时显著减少共享数据结构中的元素移动的次数,提高多线程访问的性能。本发明还提供了一种相应的装置。
Description
技术领域
本发明涉及用于多核体系结构的并行程序,具体地,涉及并行程序中的多个线程并行访问共享数据结构的方法及装置。
背景技术
当前,微处理器技术正在从单核时代进入多核时代,多核处理器正在成为主流并且快速发展。在多核处理器中,每一个CPU核都可支持多个线程。随着对多核处理器的计算能力的需求的增长,能够有效利用硬件并行性的并行编程是最合适的方式。在并行计算中,通过对多核处理器中的多个CPU核(处理单元)进行编程以协同解决一个问题,能够提高计算速度。为了充分利用多核处理器,通常使用并行程序,即应用程序中包含并行处理。在并行程序中,任务处理被分成多个部分(线程),这些线程可并行地执行,并通过访问某些共享数据结构和使用合适的同步方法来彼此通信,以协同并正确地工作。
当并行程序在多核处理器上运行时,该并行程序中的多个线程可访问共享数据结构,以对共享数据结构进行操作,例如,删除元素或增加元素。当多个线程访问共享数据结构时,需要使用同步机制以确保每次只有一个线程能够对共享数据结构进行操作,这可通过为线程授予共享数据结构的锁来实现。当一个线程获得共享数据结构的锁时,其它线程都不能获得该锁。获得锁的线程可对共享数据结构进行操作,并在结束操作后释放该锁,然后由另一个线程获得该锁以进行操作。
在并行程序中,基于数组的数据结构被广泛应用,其中,数组是最常用的。
下面通过一个例子说明现有的多个线程访问共享数据结构的方案。图1示出了三个线程并行访问基于数组的列表的过程。如图1(a)所示,列表的位置0-3的元素分别是“A”、“B”、“C”和“D”,线程1的操作是“add(0,‘Y’)”,即在位置0处添加元素“Y”,线程2的操作是“add(1,‘X’)”,即在位置1处添加元素“X”,线程3的操作是“remove(1)”,即删除位置1处的元素。首先,线程1获得该列表的锁,在列表的位置0处添加元素“Y”,相应地,原本在位置0-3处的元素“A”、“B”、“C”和“D”被移动到位置1-4处,如图1(b)所示。然后,线程1释放锁,由线程2获得该锁,线程2在列表的位置1处添加元素“X”,相应地,原本在位置1-4处的元素“A”、“B”、“C”和“D”被移动到位置2-5处,如图1(c)所示。然后,线程2释放锁,由线程3获得锁,线程3删除位置1处的元素“X”,原本在位置2-5处的元素“A”、“B”、“C”和“D”被移动到位置1-4处,如图1(d)所示。通过以上过程可以看出,每次线程对列表进行操作时,列表中的元素都将移动。在实际的应用程序中,当多个线程频繁地修改数据结构时,会出现很多的如上所述的元素移动,这些元素移动的开销会降低整个多核处理器的性能。
为了改善多核处理器的性能,提出了对多核处理器所使用的数据库采用聚合写(Aggregate Write)的方案。聚合写在数据库、文件系统和并行输入输出系统的设计中很普遍,它可改善并行应用程序在不同场景下的吞吐量和延迟。在并行输入输出系统和文件系统中,在程序中的某个线程访问存储器时,为了改善吞吐量和减少延迟,将要写入存储器的内容首先被缓存在缓存器中,然后,该线程继续其工作而无需等待上述内容被写入实际的存储器中。
发明内容
本发明正是鉴于上述的技术问题而提出的,其目的在于提供一种并行应用程序中的多个线程并行访问共享数据结构的方法及装置,其能够在修改共享数据结构时减少元素移动的次数,提高多线程访问的性能。
根据本发明的一个方面,提供一种并行应用程序中的多个线程并行访问共享数据结构的方法,包括:对所述多个线程中的一个线程授予所述共享数据结构的锁;对所述共享数据结构执行获得所述锁的线程的操作;缓存所述多个线程中未获得所述锁的线程的操作;以及在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所缓存的操作。
根据本发明的另一个方面,提供一种并行应用程序中的多个线程并行访问共享数据结构的装置,包括:锁授予模块,用于对所述多个线程中的某个线程授予所述共享数据结构的锁;操作执行模块,用于对所述共享数据结构执行操作;以及缓存模块,用于缓存所述多个线程中未获得所述锁的线程的操作;其中,所述操作执行模块在所述多个线程中的一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行该线程的操作,在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所缓存的操作。
附图说明
图1是现有的多个线程并行访问列表的过程的示意图;
图2是根据本发明的一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图;
图3是使用图2所示的实施例的方法的多个线程并行访问列表的过程的示意图;
图4是根据本发明的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图;
图5是图4所示的实施例中合并所缓存的操作的步骤的流程图;
图6是根据本发明的一个实施例的并行应用程序中的多个线程并行访问共享数据结构的装置的方框图;
图7是根据本发明的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的装置的方框图。
具体实施方式
相信通过以下结合附图对本发明的具体实施例的详细描述,本发明的上述和其它目的、特征和优点将更加明显。
图2是根据本发明的一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图。下面结合附图,对本实施例进行详细描述。
如图2所示,当多个线程并行访问一个共享数据结构时,在步骤S201,每个线程请求获取用于锁定共享数据结构的锁,并仅对其中的一个线程授予该共享数据结构的锁。在上述一个线程获得该锁的期间,在步骤S210,对该共享数据结构执行该获得锁的线程的操作,并在步骤S220,缓存该多个线程中其它未获得锁的线程的操作。在对共享数据结构执行了获得锁的线程的操作之后,该获得锁的线程释放该锁。然后,在步骤S230,对多个线程中的另一个线程授予该锁,并在该另一个线程获得锁的期间,对共享数据结构执行所有所缓存的操作。
在本实施例中,共享数据结构是基于数组的数据结构,例如,数组。另外,线程的操作包括三种类型,分别是:1)按值删除操作(REMOVE_VALUE),即删除共享数据结构中具有该值的元素;2)按操作位置删除操作(REMOVE_INDEX),即删除共享数据结构中指定操作位置的元素;以及按操作位置添加操作(ADD),即在共享数据结构中的指定操作位置添加元素。
图3示出了使用图2所示的实施例的方法的多个线程并行访问列表的过程。如图3(a)所示,有三个线程要访问一个基于数组的列表,其中,该列表在位置0-3处的元素是“A”、“B”、“C”和“D”,并且线程1的操作是“remove(1)”,线程2的操作是“add(0,‘Y’)”,线程3的操作是“remove(‘B’)”。首先,线程3获得该列表的锁,则对列表执行线程3的操作,从列表中删除元素“B”,并缓存线程1和线程2的操作(如图3(b)所示)。线程1和线程2等待线程3释放锁,当线程3释放了该列表的锁后,线程2获得该锁,则对列表执行所缓存的线程1和线程2的操作,从列表中删除位置1的元素,并在位置0处添加元素“Y”(如图3(c)所示)。
通过以上描述可以看出,本实施例的并行应用程序中的多个线程并行访问共享数据结构的方法能够在共享数据结构被一个线程锁定时,自动缓存其它未获得共享数据结构的锁的线程的操作,并在另一个线程获得共享数据结构的锁的期间,执行所有缓存的操作,从而在修改共享数据结构时显著减少共享数据结构中的元素移动的次数,提高多线程访问的性能。
图4是根据本发明的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的方法的流程图,其中与前面实施例相同的部分采用相同的附图标记,并适当省略其说明。下面结合附图,对本实施例进行详细描述。
在本实施例中,在缓存了多个线程中其它未获得锁的线程的操作(步骤S220)后,将所缓存的操作合并为一个复合操作(步骤S225),然后,在多个线程中的另一个线程获得锁的期间,对共享数据结构执行该复合操作(步骤S230)。
图5示出了步骤225的具体流程。如图5所示,当合并所缓存的操作时,首先在步骤S501中,确定所缓存的操作中的每一个操作的优先级。在本实施例中,在线程的三种类型操作中,按值删除操作的优先级高于按操作位置删除操作的优先级,且按操作位置删除操作的优先级高于按操作位置添加操作的优先级,即REMOVE_VALUE>REMOVE_INDEX>ADD。在步骤S505,确定每一个操作的操作位置。具体地,当确定操作位置时,确定每一个按值删除操作中的值在共享数据结构中的位置,并将该位置作为该按值删除操作的操作位置,并且确定每一个按操作位置删除操作和每一个按操作位置添加操作的操作位置。然后,在步骤S510,按照所缓存的每一个操作的优先级和操作位置,对所缓存的操作进行排序,以形成复合操作。这样,在复合操作中,按值删除操作位于最前面,其次是按操作位置删除操作,最后是按操作位置添加操作,并且在每种类型的操作中,各个操作按照操作位置进行排序。
进一步地,对排序后的所缓存的操作执行冲突检测和解决操作(步骤520)。在本实施例中,在步骤520中,首先在步骤S5201,检测排序后的操作中是否包含多个相同的按值删除操作,如果包含,则在步骤S5202,对这些相同的按值删除操作分配不同的操作位置,然后,在步骤S5203,删除未分配到操作位置的按值删除操作。在一个实施例中,如果该值在共享数据结构中的位置的数量少于这些相同的按值删除操作的数量,则多余的按值删除操作不被分配操作位置。并且在步骤S5204,检测排序后的操作中是否包含多个操作位置相同的操作。如果检测到有多个操作位置相同的操作,则在步骤S5205,对于这些操作位置相同的操作,将第一个具有最高优先级的操作作为当前操作,并以当前操作的操作位置为当前位置,将当前操作的下一个操作的操作位置调整为当前位置的后续位置,然后在步骤S5206,判断调整后的下一个操作的操作位置是否是共享数据结构的有效位置。如果调整后的操作位置是有效位置,则将该下一个操作作为当前操作,重新进行上述的操作位置调整和有效位置判断。如果调整后的操作位置不是有效位置,则在步骤S5207,删除相应的操作以及剩余的操作。
本领域的普通技术人员能够理解,除了采用上述的步骤外,还可以采用其它的方式实现对排序后的操作的冲突检测和解决。
下面通过一个例子来说明本实施例的方法。假设所缓存的操作包括线程1的操作remove(1)、线程3的操作add(1,‘X’)、线程4的操作remove(1)、线程5的操作add(3,‘Y’)和线程6的操作remove(‘C’),当合并这些操作时,首先确定线程6的操作的优先级最高,其次是线程1和线程4的操作,优先级最低的是线程3和线程5的操作,并确定线程6的操作的操作位置,如果共享数据结构采用图3中的列表,则线程6的操作的操作位置是“2”。这样,排序后的操作的顺序是“remove(‘C’),remove(1),remove(1),add(1,‘X’),add(5,‘Y’)”,其中由于线程1、线程3和线程4的操作的操作位置相同,因此当修改共享数据结构时会产生冲突。根据本实施例的方法,保持第一个remove(1)操作的操作位置不变,将第二个remove(1)操作的操作位置调整为“2”,并将add(1,‘X’)操作的操作位置调整为“3”。因此,最后得到的复合操作为“remove(‘C’),remove(1),remove(2),add(3,‘X’),add(5,‘Y’)”。
通过以上描述可以看出,本实施例的并行应用程序中的多个线程并行访问共享数据结构的方法能够进一步处理所缓存的操作中存在的冲突,以确保多线程的操作之间的逻辑一致性。
在同一个发明构思下,图6是根据本发明的一个实施例的并行应用程序中的多个线程并行访问共享数据结构的装置的方框图。其中,对于与前面实施例相同的部分,适当省略其说明。下面结合附图,对本实施例进行详细说明。
如图6所示,本实施例的并行应用程序中的多个线程并行访问共享数据结构的装置600包括:锁授予模块601,其对多个线程中的某个线程授予共享数据结构的锁;操作执行模块602,其对共享数据结构执行线程的操作;以及缓存模块603,用于缓存多个线程中未获得锁的线程的操作;其中,操作执行模块602在多个线程中的一个线程获得共享数据结构的锁的期间,对共享数据结构执行该线程的操作,在随后的多个线程中的另一个线程获得共享数据结构的锁的期间,对共享数据结构执行所缓存的操作。
在本实施例中,当多个线程并行访问一个共享数据结构时,锁授予模块601只向其中一个线程授予该共享数据结构的锁,而其它线程等待释放锁。当其中一个线程获得锁后,操作执行模块602对共享数据结构执行该线程的操作,并且缓存模块603缓存其它未获得锁的线程的操作。在操作执行模块602结束操作后,获得锁的线程释放共享数据结构的锁,由锁授予模块601向多个线程中的另一个线程授予锁。然后,操作执行模块602对共享数据结构执行所有所缓存的操作。
如前所述,线程的操作包括三种类型:按值删除操作(REMOVE_VALUE)、按操作位置删除操作(REMOVE_INDEX)和按操作位置添加操作(ADD)。在本实施例中,共享数据结构是基于数组的。
应当指出,本实施例的并行应用程序中的多个线程并行访问共享数据结构的装置600在操作上可以实现图2所示的并行应用程序中的多个线程并行访问共享数据结构的方法。
图7是根据本发明的另一个实施例的并行应用程序中的多个线程并行访问共享数据结构的装置的方框图,其中,与前面实施例相同的部分采用相同的附图标记,并适当省略其说明。
如图7所示,本实施例的并行应用程序中的多个线程并行访问共享数据结构的装置700除了包括锁授予模块601、操作执行模块602和缓存模块603外,还包括:合并模块604,其将在缓存模块603中缓存的操作合并为一个复合操作。
在本实施例中,当在缓存模块603中缓存了未获得锁的线程的操作之后,合并模块604对这些线程的操作进行合并,以形成复合操作。在合并模块604中,首先优先级确定单元6041确定所缓存的每一个操作的优先级。在本实施例中,对于前述的三种类型的操作,定义按值删除操作的优先级高于按操作位置删除操作的优先级,且按操作位置删除操作的优先级高于按操作位置添加操作的优先级。接着,位置确定单元6042确定每一个操作的操作位置。在本实施例中,位置确定单元6042确定在每一个按值删除操作中的值在共享数据结构中的位置,并将该位置作为该按值删除操作的操作位置,并且确定每一个按操作位置删除操作和每一个按操作位置添加操作的操作位置。然后,排序单元6043按照在优先级确定单元6041中确定的每个操作的优先级和在位置确定单元6042中确定的每个操作的操作位置,对所缓存的操作进行排序,从而形成复合操作。这样,在复合操作中,按值删除操作位于最前面,其次是按操作位置删除操作,最后是按操作位置添加操作,并且在每种类型的操作中,各个操作按照操作位置进行排序。
进一步地,合并模块604还包括冲突检测和解决单元6044,其对由排序单元排序后的所缓存的操作执行冲突检测和解决操作。在冲突检测和解决单元6044中,冲突检测单元检测排序后的操作中是否包含多个相同的按值删除操作和/或多个操作位置相同的操作。当冲突检测单元检测到有多个相同的按值删除操作时,由位置分配单元对每一个相同的按值删除操作分配不同的操作位置,如果出现按值删除操作没有被分配操作位置的情况,则由操作删除单元删除未分配操作位置的按值删除操作。当冲突检测单元检测到排序后的操作中包含多个操作位置相同的操作时,位置调整单元对于这些操作位置相同的操作,以第一个具有最高优先级的操作为当前操作,并且当前操作的操作位置作为当前位置,将当前操作的下一个操作的操作位置调整为当前位置的后续位置。然后,有效位置判断单元判断调整后的下一个操作的操作位置是否是共享数据结构的有效位置。如果调整后的操作位置是有效位置,则位置调整单元以该下一个操作为当前操作进行位置调整操作,并由有效位置判断单元进行判断。如果调整后的操作位置不是有效位置,则由操作删除单元删除相应的操作以及剩余的操作。
应当指出,本实施例的并行应用程序中的多个线程并行访问共享数据结构的装置700在操作上可以实现图4和图5所示的并行应用程序中的多个线程并行访问共享数据结构的方法。
应当指出,上述实施例中的并行应用程序中的多个线程并行访问共享数据结构的装置及其各个组成部分可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
以上虽然通过一些示例性的实施例详细描述了本发明的并行应用程序中的多个线程并行访问共享数据结构的方法和装置,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅由所附的权利要求限定。
Claims (18)
1.一种并行应用程序中的多个线程并行访问共享数据结构的方法,包括:
对所述多个线程中的一个线程授予所述共享数据结构的锁;
对所述共享数据结构执行获得所述锁的线程的操作;
缓存所述多个线程中未获得所述锁的线程的操作;以及
在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述所缓存的操作。
2.根据权利要求1所述的并行应用程序中的多个线程并行访问共享数据结构的方法,还包括:将所述所缓存的操作合并为复合操作。
3.根据权利要求1或2所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,所述操作是以下操作的任意一个:按值删除操作,即删除共享数据结构中具有所述值的元素;按操作位置删除操作,即删除共享数据结构中指定操作位置的元素;以及按操作位置添加操作,即在共享数据结构中的指定操作位置添加元素。
4.根据权利要求2或3所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,将所述所缓存的操作合并为复合操作的步骤包括:
确定所述缓存的操作的每一个的优先级和操作位置;以及
按照所述缓存的操作的优先级和操作位置,对所述缓存的操作进行排序。
5.根据权利要求4所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,确定所述所缓存的操作的每一个的操作位置的步骤包括:
确定每一个按值删除操作中的值在所述共享数据结构中的位置,作为该按值删除操作的操作位置;以及
确定每一个按操作位置删除操作和每一个按操作位置添加操作的操作位置。
6.根据权利要求4或5所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,将所述所缓存的操作合并为复合操作的步骤还包括:对排序后的所述所缓存的操作执行冲突检测和解决操作。
7.根据权利要求6所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,所述对排序后的所述所缓存的操作执行冲突检测和解决操作的步骤包括:
检测所述排序后的操作中是否包含多个相同的按值删除操作;
如果包含,则对所述多个相同的按值删除操作分配不同的操作位置;
删除未分配操作位置的按值删除操作;
检测所述排序后的操作中是否包含多个所述操作位置相同的操作;
对于所述操作位置相同的操作,以第一个具有最高优先级的操作为当前操作,并以所述当前操作的操作位置为当前位置,将所述当前操作的下一个操作的操作位置调整为所述当前位置的后续位置;
判断调整后的所述下一个操作的操作位置是否是所述共享数据结构的有效位置;
如果是有效位置,则以所述下一个操作为当前操作,执行上述的位置调整步骤和有效位置判断步骤;以及
如果不是有效位置,则删除相应的操作以及剩余的操作。
8.根据权利要求3至7任意一项所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,所述按值删除操作的优先级高于所述按操作位置删除操作的优先级,所述按操作位置删除操作的优先级高于所述按操作位置添加操作的优先级。
9.根据权利要求1至8任意一项所述的并行应用程序中的多个线程并行访问共享数据结构的方法,其中,所述共享数据结构是基于数组的。
10.一种并行应用程序中的多个线程并行访问共享数据结构的装置,包括:
锁授予模块,用于对所述多个线程中的某个线程授予所述共享数据结构的锁;
操作执行模块,用于对所述共享数据结构执行线程的操作;以及
缓存模块,用于缓存所述多个线程中未获得所述锁的线程的操作;
其中,所述操作执行模块在所述多个线程中的一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行该线程的操作,在随后的所述多个线程中的另一个线程获得所述共享数据结构的锁的期间,对所述共享数据结构执行所述所缓存的操作。
11.根据权利要求10所述的并行应用程序中的多个线程并行访问共享数据结构的装置,还包括:合并模块,用于将所述所缓存的操作合并为复合操作。
12.根据权利要求10或11所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述操作是以下操作的任意一个:按值删除操作,即删除共享数据结构中具有所述值的元素;按操作位置删除操作,即删除共享数据结构中指定操作位置的元素;以及按操作位置添加操作,即在共享数据结构中的指定操作位置添加元素。
13.根据权利要求11或12所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述合并模块包括:
优先级确定单元,用于确定所述所缓存的操作的每一个的优先级;
位置确定单元,用于确定所述所缓存的操作的每一个的位置;以及
排序单元,用于按照所述所缓存的操作的优先级和操作位置,对所述所缓存的操作进行排序。
14.根据权利要求13所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述位置确定单元确定每一个按值删除操作中的值在所述共享数据结构中的位置,作为该按值删除操作的操作位置,并确定每一个按操作位置删除操作和每一个按操作位置添加操作的操作位置。
15.根据权利要求13或14所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述合并模块还包括:冲突检测和解决单元,用于对排序后的所述所缓存的操作执行冲突检测和解决操作。
16.根据权利要求15所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述冲突检测和解决单元包括:
冲突检测单元,用于检测所述排序后的操作中是否包含多个相同的按值删除操作和/或多个所述操作位置相同的操作;
位置分配单元,用于在检测到所述排序后的操作中包含多个相同的按值删除操作时,对所述多个相同的按值删除操作分配不同的操作位置;
位置调整单元,用于在检测到所述排序后的操作中包含多个所述操作位置相同的操作时,对于所述操作位置相同的操作,以第一个具有最高优先级的操作为当前操作,并以所述当前操作的操作位置为当前位置,将所述当前操作的下一个操作的操作位置调整为所述当前位置的后续位置;
有效位置判断单元,用于判断调整后的所述下一个操作的操作位置是否是所述共享数据结构的有效位置;以及
操作删除单元,用于删除未分配操作位置的按值删除操作,以及在调整后的所述下一个操作的操作位置不是有效位置时,删除相应的操作和剩余的操作;
其中,当所述有效位置判断单元判断调整后的所述下一个操作的操作位置是有效位置时,所述位置调整单元以所述下一个操作为当前操作进行位置调整操作,并由所述有效位置判断单元进行判断。
17.根据权利要求12至16任意一项所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述按值删除操作的优先级高于所述按操作位置删除操作的优先级,所述按操作位置删除操作的优先级高于所述按操作位置添加操作的优先级。
18.根据权利要求10至17任意一项所述的并行应用程序中的多个线程并行访问共享数据结构的装置,其中,所述共享数据结构是基于数组的。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810161517.3A CN101685408B (zh) | 2008-09-24 | 2008-09-24 | 多个线程并行访问共享数据结构的方法及装置 |
US12/566,254 US8316370B2 (en) | 2008-09-24 | 2009-09-24 | Method and apparatus for accessing a shared data structure in parallel by multiple threads |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810161517.3A CN101685408B (zh) | 2008-09-24 | 2008-09-24 | 多个线程并行访问共享数据结构的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101685408A true CN101685408A (zh) | 2010-03-31 |
CN101685408B CN101685408B (zh) | 2013-10-09 |
Family
ID=42048575
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810161517.3A Active CN101685408B (zh) | 2008-09-24 | 2008-09-24 | 多个线程并行访问共享数据结构的方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8316370B2 (zh) |
CN (1) | CN101685408B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937537A (zh) * | 2010-10-25 | 2011-01-05 | 上海申瑞电力科技股份有限公司 | 电网历史数据的并行访问方法 |
CN103197977A (zh) * | 2011-11-16 | 2013-07-10 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN103365720A (zh) * | 2012-03-28 | 2013-10-23 | 国际商业机器公司 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
CN103617025A (zh) * | 2013-11-27 | 2014-03-05 | 积成电子股份有限公司 | 基于数据隔离避免线程冲突的方法 |
CN104636206A (zh) * | 2015-02-05 | 2015-05-20 | 北京创毅视讯科技有限公司 | 一种系统性能的优化方法和装置 |
CN105071973A (zh) * | 2015-08-28 | 2015-11-18 | 迈普通信技术股份有限公司 | 一种报文接收方法及网络设备 |
CN105406999A (zh) * | 2015-11-20 | 2016-03-16 | 福建星网锐捷安防科技有限公司 | 一对多数据分发方法和分发设备 |
CN106575238A (zh) * | 2014-09-26 | 2017-04-19 | 华为技术有限公司 | 支持页面隐式锁的共享存储架构中的并发控制 |
CN109634762A (zh) * | 2018-12-19 | 2019-04-16 | 北京达佳互联信息技术有限公司 | 一种数据回收方法、装置、电子设备及存储介质 |
CN111052094A (zh) * | 2017-09-07 | 2020-04-21 | 阿里巴巴集团控股有限公司 | 使用c状态和睿频加速提高用户空间的自旋锁效率 |
CN111158919A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 内存资源原地共享决策系统及其方法 |
CN112306699A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 访问临界资源的方法及装置、计算机设备及可读存储介质 |
CN116820333A (zh) * | 2023-06-12 | 2023-09-29 | 青海师范大学 | 一种基于多线程的ssdraid-5持续写入方法 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9009726B2 (en) * | 2010-12-10 | 2015-04-14 | Microsoft Technology Licensing, Llc | Deterministic sharing of data among concurrent tasks using pre-defined deterministic conflict resolution policies |
US9436502B2 (en) | 2010-12-10 | 2016-09-06 | Microsoft Technology Licensing, Llc | Eventually consistent storage and transactions in cloud based environment |
US8954409B1 (en) * | 2011-09-22 | 2015-02-10 | Juniper Networks, Inc. | Acquisition of multiple synchronization objects within a computing device |
KR102177871B1 (ko) * | 2013-12-20 | 2020-11-12 | 삼성전자주식회사 | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 |
GB2528056B (en) * | 2014-07-08 | 2021-06-16 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing lock-protected processing operations for multiple threads |
US10789002B1 (en) * | 2017-10-23 | 2020-09-29 | EMC IP Holding Company LLC | Hybrid data deduplication for elastic cloud storage devices |
CN115167316B (zh) * | 2022-08-04 | 2024-05-14 | 中国核动力研究设计院 | 一种核电厂dcs平台的协同处理方法、系统及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058460A (en) * | 1996-06-28 | 2000-05-02 | Sun Microsystems, Inc. | Memory allocation in a multithreaded environment |
US5860107A (en) | 1996-10-07 | 1999-01-12 | International Business Machines Corporation | Processor and method for store gathering through merged store operations |
US6629175B1 (en) * | 2000-04-14 | 2003-09-30 | International Business Machines Corporation | Efficient adapter context switching |
US7120762B2 (en) * | 2001-10-19 | 2006-10-10 | Wisconsin Alumni Research Foundation | Concurrent execution of critical sections by eliding ownership of locks |
US7831974B2 (en) | 2002-11-12 | 2010-11-09 | Intel Corporation | Method and apparatus for serialized mutual exclusion |
US7089374B2 (en) * | 2003-02-13 | 2006-08-08 | Sun Microsystems, Inc. | Selectively unmarking load-marked cache lines during transactional program execution |
US7206903B1 (en) * | 2004-07-20 | 2007-04-17 | Sun Microsystems, Inc. | Method and apparatus for releasing memory locations during transactional execution |
US7975271B2 (en) * | 2005-03-30 | 2011-07-05 | Hewlett-Packard Development Company, L.P. | System and method for dynamically determining a portion of a resource for which a thread is to obtain a lock |
US7797704B2 (en) * | 2005-03-30 | 2010-09-14 | Hewlett-Packard Development Company, L.P. | System and method for performing work by one of plural threads using a lockable resource |
US7543266B2 (en) * | 2006-11-20 | 2009-06-02 | Microsoft Corporation | Lock-free state merging in parallelized constraint satisfaction problem solvers |
-
2008
- 2008-09-24 CN CN200810161517.3A patent/CN101685408B/zh active Active
-
2009
- 2009-09-24 US US12/566,254 patent/US8316370B2/en active Active
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937537A (zh) * | 2010-10-25 | 2011-01-05 | 上海申瑞电力科技股份有限公司 | 电网历史数据的并行访问方法 |
CN103197977A (zh) * | 2011-11-16 | 2013-07-10 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN103197977B (zh) * | 2011-11-16 | 2016-09-28 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN103365720A (zh) * | 2012-03-28 | 2013-10-23 | 国际商业机器公司 | 用于多线程环境下动态调整全局堆分配的方法和系统 |
CN103617025A (zh) * | 2013-11-27 | 2014-03-05 | 积成电子股份有限公司 | 基于数据隔离避免线程冲突的方法 |
CN103617025B (zh) * | 2013-11-27 | 2017-03-08 | 积成电子股份有限公司 | 基于数据隔离避免线程冲突的方法 |
CN106575238A (zh) * | 2014-09-26 | 2017-04-19 | 华为技术有限公司 | 支持页面隐式锁的共享存储架构中的并发控制 |
CN104636206A (zh) * | 2015-02-05 | 2015-05-20 | 北京创毅视讯科技有限公司 | 一种系统性能的优化方法和装置 |
CN104636206B (zh) * | 2015-02-05 | 2018-01-05 | 北京创毅视讯科技有限公司 | 一种系统性能的优化方法和装置 |
CN105071973A (zh) * | 2015-08-28 | 2015-11-18 | 迈普通信技术股份有限公司 | 一种报文接收方法及网络设备 |
CN105071973B (zh) * | 2015-08-28 | 2018-07-17 | 迈普通信技术股份有限公司 | 一种报文接收方法及网络设备 |
CN105406999A (zh) * | 2015-11-20 | 2016-03-16 | 福建星网锐捷安防科技有限公司 | 一对多数据分发方法和分发设备 |
CN111052094A (zh) * | 2017-09-07 | 2020-04-21 | 阿里巴巴集团控股有限公司 | 使用c状态和睿频加速提高用户空间的自旋锁效率 |
CN111052094B (zh) * | 2017-09-07 | 2024-04-02 | 阿里巴巴集团控股有限公司 | 使用c状态和睿频加速提高用户空间的自旋锁效率 |
CN109634762A (zh) * | 2018-12-19 | 2019-04-16 | 北京达佳互联信息技术有限公司 | 一种数据回收方法、装置、电子设备及存储介质 |
CN112306699A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 访问临界资源的方法及装置、计算机设备及可读存储介质 |
WO2021018011A1 (zh) * | 2019-07-29 | 2021-02-04 | 华为技术有限公司 | 访问临界资源的方法及装置、计算机设备及可读存储介质 |
CN112306699B (zh) * | 2019-07-29 | 2024-04-12 | 华为技术有限公司 | 访问临界资源的方法及装置、计算机设备及可读存储介质 |
CN111158919A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 内存资源原地共享决策系统及其方法 |
CN116820333A (zh) * | 2023-06-12 | 2023-09-29 | 青海师范大学 | 一种基于多线程的ssdraid-5持续写入方法 |
CN116820333B (zh) * | 2023-06-12 | 2024-02-23 | 青海师范大学 | 一种基于多线程的ssdraid-5持续写入方法 |
Also Published As
Publication number | Publication date |
---|---|
US20100083266A1 (en) | 2010-04-01 |
CN101685408B (zh) | 2013-10-09 |
US8316370B2 (en) | 2012-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101685408B (zh) | 多个线程并行访问共享数据结构的方法及装置 | |
US6895482B1 (en) | Reordering and flushing commands in a computer memory subsystem | |
US20170109213A1 (en) | Work stealing in heterogeneous computing systems | |
US20170371720A1 (en) | Multi-processor apparatus and method of detection and acceleration of lagging tasks | |
US9304920B2 (en) | System and method for providing cache-aware lightweight producer consumer queues | |
US9384037B2 (en) | Memory object reference count management with improved scalability | |
US8275935B2 (en) | Semiconductor storage device and control method thereof | |
KR102236419B1 (ko) | 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체 | |
US8135723B2 (en) | Leveraging low-latency memory access | |
CN1147650A (zh) | 多处理系统 | |
CN1577280A (zh) | 提高多内核处理器性能的方法、系统和装置 | |
CN1914597A (zh) | 处理单元的动态加载和卸载 | |
US11455781B2 (en) | Data reading/writing method and system in 3D image processing, storage medium and terminal | |
US12099736B2 (en) | Scalable architecture enabling large memory system for in-memory computations | |
US20140115291A1 (en) | Numa optimization for garbage collection of multi-threaded applications | |
Manca et al. | CUDA‐quicksort: an improved GPU‐based implementation of quicksort | |
US20090070527A1 (en) | Using inter-arrival times of data requests to cache data in a computing environment | |
Pohl et al. | Joins on high-bandwidth memory: a new level in the memory hierarchy | |
Boroumand et al. | LazyPIM: Efficient support for cache coherence in processing-in-memory architectures | |
US9946461B2 (en) | In-flash immutable object processing | |
JP7262520B2 (ja) | 命令を実行するための方法、装置、機器及びコンピュータ読み取り可能な記憶媒体 | |
US20100217938A1 (en) | Method and an apparatus to improve locality of references for objects | |
US20080005726A1 (en) | Methods and systems for modifying software applications to implement memory allocation | |
US9208080B2 (en) | Persistent memory garbage collection | |
JP2007528082A (ja) | キャッシュ機構 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |