CN105511969B - 一种跨进程的线程间进行互斥的方法 - Google Patents
一种跨进程的线程间进行互斥的方法 Download PDFInfo
- Publication number
- CN105511969B CN105511969B CN201510834063.1A CN201510834063A CN105511969B CN 105511969 B CN105511969 B CN 105511969B CN 201510834063 A CN201510834063 A CN 201510834063A CN 105511969 B CN105511969 B CN 105511969B
- Authority
- CN
- China
- Prior art keywords
- mutual exclusion
- exclusion information
- threads
- thread
- value
- 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
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
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
技术领域
本发明涉及信息处理技术领域,尤其涉及一种跨进程的线程间进行互斥的方法。
背景技术
现代操作系统采用多道程序设计机制,多个进程可以并发执行,每个进程下又包含有多个线程,CPU在线程之间来回切换,共享某些资源,提高了资源的利用率,但这也使得处理并发执行的多个线程之间的冲突和相互制约关系成为了一道难题。如果对并发线程的调度不当,则可能会出现运行结果与切换时间有关的情况,令结果不可再现,影响系统的效率和正确性,严重时还会使系统直接崩溃。需要一些机制来控制并发线程间的这种相互制约关系。
线程间通常存在着两种制约关系:直接制约关系和间接制约关系。所谓直接制约关系,指的是多个线程利用一些共享的资源相互合作,完成某些事情,但是其中某个线程做一件事前,可能要等待另外一个线程完成另外一件事,是一种源于相互合作的直接制约关系。而间接制约关系,指的是一个线程在使用共享的资源时,另外一个线程不允许使用,是一种源于资源共享的间接制约关系。在信息技术领域中,前者被称为线程同步,后者被称为线程互斥。
在Linux中,有一些资源是共享的,但是这些资源一次只能提供给一个线程使用,我们称这些资源为临界资源。在使用临界资源的时候,如果不加以互斥访问控制,就会出现非预期的结果。在源代码中,访问临界资源的的代码段被称作为临界区,当有线程进入临界区时,其他线程必须等待,以确保这些临界资源是被互斥获得使用的。互斥信息的作用就相当于一扇门配一把锁,任何一个线程在进入临界区之前需要对互斥信息进行加锁操作,成功获得锁的线程可以成功通过“门”进入临界区,其他线程则必须在“门”外等待,直到进入获得锁的线程从“门”内出来释放锁,之后其它线程再次竞争锁重复上述过程。
根据需要互斥的线程的关系,线程互斥分为进程内的线程互斥和跨进程的线程互斥两种。
进程内的线程互斥,指的是需要互斥的线程都是在一个进程内,因为进程内的全局数据资源是可以被所有线程共享的,这种情况下,只需要在进程设置一个全局的互斥信息即可用于所有线程的互斥。
跨进程的线程互斥,指的是需要互斥的线程是在不同进程内。不同于在单个进程内的多个线程之间实施互斥访问,跨进程的线程之间的互斥会有更多的问题需要考虑和解决。因为互斥信息用于不同进程之间,并且我们知道某个进程对其他进程的内部情况是不可见的,所以在单个进程内部设置一个全局变量无法满足要求,此时,需要将互斥信息放到一个对所有用户进程可见的区域内,这样就满足了所有线程均可使用同一个互斥信息的要求,比较常用的方法有两种,一种是将互斥信息保存到操作系统的共享内存中,另一种则是将互斥信息保存到操作系统的文件中。
但是,当一个进程内的线程使用完了互斥信息之后,它不知道是该删除互斥信息还是继续保留互斥信息。假如有两个进程,我们记为P1和P2,在P1内有线程T1,P2内有线程T2。如果T1在使用完了互斥信息之后将其删除,而在删除之前T2中已经取得了互斥信息的句柄,只是准备使用而未使用,那么T1删除了互斥信息之后T2再使用互斥信息,就会发生不可预知的错误;如果T1在使用完了互斥信息之后未将其删除,而此时已经没有任何进程使用互斥信息了,那么就会留下垃圾值。除了互斥信息是否需要保留的问题,在使用过程中还会遇到进程或线程中途崩溃退出的情况,此时,对互斥信息的不完整操作,导致遗留的互斥信息中的数据值是无效的垃圾值,对垃圾值的处理也是一个需要解决的问题。另外,一个线程在进行加锁操作时,假如它已经获得锁,它不应当出现向自身等待锁的情况,否则就会产生死锁。一个线程在解锁操作时,若本身并不是获得锁资源的线程,它不可以进行解锁操作。
现代操作系统的多道程序设计机制,使得软件开发过程中时常会遇到跨进程的线程互斥的问题,虽然在Linux操作系统下提供了互斥锁、记录锁以及信号量等机制用于互斥,但是,互斥锁通常用单个进程内的线程互斥,扩展到跨进程的线程互斥时,不仅使用起来不便,而且对于垃圾值的情况无法处理;记录锁可用于进程间的互斥,但是却不能用于线程的互斥,它并不是线程安全的;而信号量中分为有名信号量和无名信号量,无名信号量用于单个进程内的线程之间,有名信号量则用于跨进程间的线程之间,不过如果简单的使用有名信号量,会遇到垃圾值、死锁等问题。
考虑到上述情况,需要设计并实现一种可以在跨进程的线程间进行互斥的方法,且这种方法在使用时具有易用性和灵活性。
发明内容
鉴于上述的分析,本发明旨在提供一种跨进程的线程间进行互斥的方法,用以解决现有技术中Linux下对共享资源的无法进行互斥访问的问题的问题。
本发明的目的主要是通过以下技术方案实现的:
一种跨进程的线程间进行互斥的方法,包括以下步骤:
步骤一、多个线程竞争互斥信息,胜出的线程初始化互斥信息;
步骤二、当胜出的线程获得互斥信息之后,利用互斥信息对临界区进行加锁操作;
步骤三、进行加锁操作后,线程获得互斥信息的锁,访问共享资源;同时,其它线程进行等待;
步骤四、线程使用完共享资源之后,离开临界区,进行解锁操作;互斥信息继续被其它线程竞争,重复上述步骤。
其中,所述步骤一进一步包括:
通过名称来判断该互斥信息在系统中是否存在;
如果否,则创建并初始化该互斥信息;
如果是,则判定该已存在的互斥信息中的值是否是垃圾值;
如果是垃圾值,则清除垃圾值并重新初始化;
如果不是垃圾值,直接获取该互斥信息。
其中,所述通过名称来判断该互斥信息在系统中是否存在进一步包括:
获取互斥信息名称,
将互斥信息名称进行hash映射转换为id;
检查该id所代表的互斥信息是否存在。
其中,所述步骤二进一步包括:
首先,判断当前请求加锁线程是否已经获得锁;
如果是,则返回正确;
如果否,则判断尝试枷锁的等待时间是否为无限等待;
如果是,则进行无限等待直至加锁成功;
如果否,则进行有限等待,在设定的有限时间内进行加锁等待;
如果加锁成功,则更新上锁的线程号及锁状态标记。
其中,所述步骤四进一步包括:
首先判断当前互斥信息的状态是否是上锁状态;
如果否,即没有线程获得了互斥信息的锁,则直接返回正确;
如果是,则继续判断当前执行解锁的线程是否获得锁的线程,因为只有获得锁的线程才能进行解锁操作,其它线程不允许执行解锁操作;
如果是,则对互斥信息进行解锁操作,复位上锁线程号和锁状态;
这样其它线程又可以继续竞争;如果不是,则无法进行解锁操作,返回错误。
其中,所述步骤四进一步包括:
当所有线程都不再继续使用互斥信息时,对互斥信息进行删除操作。
本发明有益效果如下:
(1)所述方法结合了信号量机制,确保了加锁、解锁的原子性,使得该方法是线程安全的;
(2)所述方法有效的解决了互斥信息垃圾值问题,避免了线程在使用时获取了垃圾值而导致异常的问题;
(3)所述方法通过保存获得锁的线程号等信息,解决了加锁时自身向自身索要锁而导致死锁的问题,同时也保证了解锁时只有获得锁的线程才有资格解锁,避免了越权限解锁的问题。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分的从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
图1为本发明具体实施例中互斥信息存取的示意图;
图2为本发明具体实施例中初始化互斥信息的流程图;
图3为本发明具体实施例中申请加锁的的流程图;
图4为本发明具体实施例中申请解锁的流程图;
图5为本发明具体实施例中多线程使用互斥信息的流程示意图。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理。
本发明的具体实施例采用了Linux系统中System V标准的有名信号量机制,因此在下文中是以有名信号量为基础进行描述的。有名信号量中存储着一个非负整数,所有通过它的线程都会将该整数减1,当该整数值为0时,所有试图通过它进入临界区的线程都将处于等待状态,直到之前通过的线程释放有名信号量,释放一次就会对整数加1,一旦该整数值大于0,就会有新的线程通过。
一种跨进程的线程间进行互斥的方法,如图5所示,图5是多个线程在使用互斥信息时的流程示意图。首先,多个线程在进入临界区之前执行加锁操作,只有一个线程胜出,成功获得互斥信息的锁。然后,该线程进入临界区,对临界资源进行操作。最后,该线程在退出临界区时进行解锁操作,互斥信息重新被其它线程竞争,重复上述过程。如此循环往复,所有的线程都可以互斥的访问并使用临界资源。
具体包括以下步骤:
步骤一、多个线程竞争互斥信息,胜出的线程初始化互斥信息。
图1是互斥信息的存取示意图,因为互斥信息要在跨进程的线程之间使用,因此互斥信息的存储必须要在一个不同进程间都可以访问的位置。本实施例中采用有名信号量来作为互斥信息,在Linux操作系统中,System V标准的有名信号量通常以文件的形式的存储在一个公共区域,任何一个进程都可以访问到,满足互斥信息用于跨进程的线程的使用条件。当有名信号量创建之后,任何一个线程就可以根据名称,找到对应找到对应的有名信号量文件,获取其中的信息。
其中,初始化互斥信息如图2所示,图2是互斥信息的初始化流程图。有名信号量的创建是依据数值型的id,提供给用户的接口是字符串名称,因此首先利用映射函数将字符串映射成id,映射函数应尽可能的保证不同的字符串映射成不同的id。映射成id之后,判断该id代表的有名信号量是否存在,如果不存在,则直接创建,并初始化信号量的值为1;如果存在,则直接获取有名信号量的值,并判定该有名信号量的值是否是垃圾值,若不是垃圾值,无需额外操作;如果信号量的值不为1,就有可能是垃圾值,若是垃圾值,则重新设置有名信号量的值为1。最后,初始化其它必要信息之后退出即可。初始化有名信号量的值为1是因为互斥访问时一次只允许一个线程访问,设置为1,一旦有一个线程通过了,值减为0之后其它线程就必须等待。
步骤二、当线程获得互斥信息之后,利用互斥信息对临界区进行加锁操作。
图3是申请加锁的流程图,首先判断请求加锁的线程是否是已经获得锁的线程,如果是,则直接返回;否则进行加锁操作。其次,因为加锁分为两种,一种是无限等待,另一种是有限等待,若是无限等待,则加锁操作会一直等待直到成功获得锁,若是有限等待,则只要在规定时间到,即使没获得锁也会返回。最后,更新上锁的线程号为当前线程号,更新锁状态为上锁。
设置ms为用户传入的时间参数,若ms小于0则表示采取无限等待方式,只有成功得到有名信号量的锁之后才会继续执行;ms大于0表示有限等待方式,在ms时间内,如果成功获得锁就继续执行,如果没有成功获得,也会在ms时间之后继续执行,但是这种情况下会返回错误。
步骤三、进行加锁操作后,线程获得互斥信息的锁,访问共享资源;同时,其它线程进行等待。
步骤四、线程使用完共享资源之后,离开临界区,进行解锁操作;互斥信息继续被其它线程竞争,重复上述步骤。
图4是解锁操作的流程图,解锁操作首先要获取信号量的值,判断信号量是否已经加过锁,如果未上锁,则直接退出;如果上锁了,则继续判断当前请求解锁的线程是否是获得锁的线程,如果不是,则没有解锁权限,不能进行解锁操作,直接退出并报错,如果是,则进行解锁操作。解锁成功会复位锁状态和上锁线程号,返回正确,解锁失败会返回错误。
与现有技术相比,本发明的有益效果在于:
(1)所述方法结合了信号量机制,确保了加锁、解锁的原子性,使得该方法是线程安全的;
(2)所述方法有效的解决了互斥信息垃圾值问题,避免了线程在使用时获取了垃圾值而导致异常的问题;
(3)所述方法通过保存获得锁的线程号等信息,解决了加锁时自身向自身索要锁而导致死锁的问题,同时也保证了解锁时只有获得锁的线程才有资格解锁,避免了越权限解锁的问题。
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (2)
1.一种跨进程的线程间进行互斥的方法,包括以下步骤:
步骤一、多个线程竞争互斥信息,胜出的线程初始化互斥信息;
所述互斥信息在跨进程的线程之间使用,所述互斥信息的存储在一个不同进程间都可以访问的位置;所述互斥信息为有名信号量,在Linux操作系统中,System V标准的有名信号量以文件的形式的存储在一个公共区域,任何一个进程都可以访问到,满足互斥信息用于跨进程的线程的使用条件;当有名信号量创建之后,任何一个线程根据名称,找到对应的有名信号量文件,获取其中的信息;
所述有名信号量的创建是依据数值型的id,提供给用户的接口是字符串名称;利用映射函数将字符名称串映射成id,映射函数为hash映射;映射成id之后,判断该id代表的有名信号量是否存在,如果不存在,则直接创建并初始化有名信号量的值为1;如果存在,则直接获取有名信号量的值,并判定该有名信号量的值是否是垃圾值,若不是垃圾值,无需额外操作;如果有名信号量的值不为1,为垃圾值;若是垃圾值,则重新设置有名信号量的值为1;最后,初始化其它必要信息之后退出即可;初始化有名信号量的值为1是因为互斥访问时一次只允许一个线程访问,设置为1,一旦有一个线程通过了,值减为0之后其它线程就必须等待;
步骤二、当胜出的线程获得互斥信息之后,利用互斥信息对临界区进行加锁操作;
步骤三、进行加锁操作后,线程获得互斥信息的锁,访问共享资源;同时,其它线程进行等待;
步骤四、线程使用完共享资源之后,离开临界区,进行解锁操作;互斥信息继续被其它线程竞争,重复上述步骤;
所述步骤一进一步包括:
通过名称来判断该互斥信息在系统中是否存在;
如果否,则创建并初始化该互斥信息;
如果是,则判定该已存在的互斥信息中的值是否是垃圾值;
如果是垃圾值,则清除垃圾值并重新初始化;
如果不是垃圾值,直接获取该互斥信息;
所述通过名称来判断该互斥信息在系统中是否存在进一步包括:
获取互斥信息名称,
将互斥信息名称进行hash映射转换为id;
检查该id所代表的互斥信息是否存在;
所述步骤二进一步包括:
首先,判断当前请求加锁线程是否已经获得锁;
如果是,则返回正确;
如果否,则判断尝试枷锁的等待时间是否为无限等待;
如果是,则进行无限等待直至加锁成功;
如果否,则进行有限等待,在设定的有限时间内进行加锁等待;
如果加锁成功,则更新上锁的线程号及锁状态标记;
设置ms为用户传入的时间参数,若ms小于0则表示采取无限等待方式,只有成功得到有名信号量的锁之后才会继续执行;ms大于0表示有限等待方式,在ms时间内,如果成功获得锁就继续执行,如果没有成功获得,也会在ms时间之后继续执行,但是这种情况下会返回错误;
所述步骤四进一步包括:
首先判断当前互斥信息的状态是否是上锁状态;
如果否,即没有线程获得了互斥信息的锁,则直接返回正确;
如果是,则继续判断当前执行解锁的线程是否获得锁的线程,因为只有获得锁的线程才能进行解锁操作,其它线程不允许执行解锁操作;
如果是,则对互斥信息进行解锁操作,复位上锁线程号和锁状态;
这样其它线程又可以继续竞争;如果不是,则无法进行解锁操作,返回错误。
2.根据权利要求1所述的跨进程的线程间进行互斥的方法,其中,所述步骤四进一步包括:
当所有线程都不再继续使用互斥信息时,对互斥信息进行删除操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510834063.1A CN105511969B (zh) | 2015-11-25 | 2015-11-25 | 一种跨进程的线程间进行互斥的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510834063.1A CN105511969B (zh) | 2015-11-25 | 2015-11-25 | 一种跨进程的线程间进行互斥的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105511969A CN105511969A (zh) | 2016-04-20 |
CN105511969B true CN105511969B (zh) | 2020-05-19 |
Family
ID=55719973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510834063.1A Active CN105511969B (zh) | 2015-11-25 | 2015-11-25 | 一种跨进程的线程间进行互斥的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105511969B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326410A (zh) * | 2016-08-23 | 2017-01-11 | 无锡天脉聚源传媒科技有限公司 | 一种数据查询方法及装置 |
CN107085601A (zh) * | 2017-03-31 | 2017-08-22 | 努比亚技术有限公司 | 一种信息处理方法及设备 |
CN106980544B (zh) * | 2017-03-31 | 2020-03-03 | 北京奇艺世纪科技有限公司 | 一种线程同步方法及线程同步系统 |
CN108733471A (zh) * | 2017-04-25 | 2018-11-02 | 深圳市优网科技有限公司 | 一种任务分发系统及方法 |
CN109213576B (zh) * | 2017-07-01 | 2022-04-08 | 武汉斗鱼网络科技有限公司 | 程序死锁检测方法、存储介质、设备及系统 |
CN107451257A (zh) * | 2017-07-31 | 2017-12-08 | 郑州云海信息技术有限公司 | 一种基于分布式文件系统的可维护性系统和方法 |
CN108132848A (zh) * | 2017-12-25 | 2018-06-08 | 传神语联网网络科技股份有限公司 | 数据通信的方法、装置及计算机可读存储介质 |
CN111435314A (zh) * | 2019-01-11 | 2020-07-21 | 武汉瓯越网视有限公司 | 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 |
CN109947575B (zh) * | 2019-03-21 | 2021-08-24 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关系统 |
CN110221923B (zh) * | 2019-06-06 | 2021-06-08 | 北京字节跳动网络技术有限公司 | 数据访问方法、装置及设备 |
CN110933448B (zh) * | 2019-11-29 | 2022-07-12 | 广州市百果园信息技术有限公司 | 直播列表服务系统及方法 |
CN112162845B (zh) * | 2020-10-30 | 2023-10-13 | 北京北信源软件股份有限公司 | 一种业务进程同步的方法及装置 |
CN114661481B (zh) * | 2022-05-25 | 2022-09-06 | 广州市保伦电子有限公司 | 一种单进程中多线程多互斥量间的控制方法以及终端 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601478A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 用于在被争夺的互斥锁上被动态限定的自旋线程的方法与系统 |
US7512950B1 (en) * | 2003-08-14 | 2009-03-31 | Sun Microsystems, Inc. | Barrier synchronization object for multi-threaded applications |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作系统中互斥信号量异常的检测方法及装置 |
CN103761182A (zh) * | 2013-12-26 | 2014-04-30 | 上海华为技术有限公司 | 一种死锁检测方法及装置 |
US8752057B1 (en) * | 2008-06-30 | 2014-06-10 | Emc Corporation | Techniques for synchronizing processing of at least two code threads |
-
2015
- 2015-11-25 CN CN201510834063.1A patent/CN105511969B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7512950B1 (en) * | 2003-08-14 | 2009-03-31 | Sun Microsystems, Inc. | Barrier synchronization object for multi-threaded applications |
CN1601478A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 用于在被争夺的互斥锁上被动态限定的自旋线程的方法与系统 |
US8752057B1 (en) * | 2008-06-30 | 2014-06-10 | Emc Corporation | Techniques for synchronizing processing of at least two code threads |
CN102681892A (zh) * | 2012-05-15 | 2012-09-19 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN103218291A (zh) * | 2013-03-29 | 2013-07-24 | 迈普通信技术股份有限公司 | 多任务操作系统中互斥信号量异常的检测方法及装置 |
CN103761182A (zh) * | 2013-12-26 | 2014-04-30 | 上海华为技术有限公司 | 一种死锁检测方法及装置 |
Non-Patent Citations (4)
Title |
---|
CodeProject-Jerry.使用System V信号量实现多线程互斥.<https://blog.csdn.net/wangjia184/article/details/6436183>.2011, * |
Linux互斥与同步应用(五):system V信号量的互斥与同步;shallnet;<https://blog.csdn.net/shallnet/article/details/42426509>;20150105;第1-3、6-8页 * |
使用System V信号量实现多线程互斥;CodeProject-Jerry;<https://blog.csdn.net/wangjia184/article/details/6436183>;20110521;第1、3、5页 * |
通过system V信号量实现进程间的互斥量;凯子哥;<https://www.oschina.net/code/snippet_1160717_34522>;20140328;1-13页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105511969A (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
US8595446B2 (en) | System and method for performing dynamic mixed mode read validation in a software transactional memory | |
US10585874B2 (en) | Locking concurrent commands in a database management system | |
US8924655B2 (en) | In-kernel SRCU implementation with reduced OS jitter | |
EP3701377B1 (en) | Method and apparatus for updating shared data in a multi-core processor environment | |
US8868604B2 (en) | Methods and apparatus for implementing Semi-distributed Lock Management | |
Zhang et al. | Lock-free transactions without rollbacks for linked data structures | |
US9940290B2 (en) | Handling CPU hotplug events in RCU without sleeplocks | |
US10929201B2 (en) | Method and system for implementing generation locks | |
US11594252B2 (en) | Reader bias based locking technique enabling high read concurrency for read-mostly workloads | |
CN105074656B (zh) | 管理并发谓词表达式的方法和装置 | |
CN112416556B (zh) | 一种数据读写优先平衡方法、系统、装置及存储介质 | |
KR101620536B1 (ko) | 액티브 록 정보 유지 및 검색 | |
US8893137B2 (en) | Transaction-based shared memory protection for high availability environments | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
US20170242755A1 (en) | Failure recovery in shared storage operations | |
US8161250B2 (en) | Methods and systems for partially-transacted data concurrency | |
US20050251790A1 (en) | Systems and methods for instrumenting loops of an executable program | |
US20170091254A1 (en) | Making volatile isolation transactions failure-atomic in non-volatile memory | |
US9021483B2 (en) | Making hardware objects and operations thread-safe | |
Zuepke et al. | Deterministic futexes: Addressing WCET and bounded interference concerns | |
US9507817B2 (en) | Method for synchronizing access to shared resources of a computing system and detecting and eliminating deadlocks using lock files | |
Pfähler et al. | Crash-safe refinement for a verified flash file system | |
US20080082533A1 (en) | Persistent locks/resources for concurrency control | |
US10310914B2 (en) | Methods and systems for recursively acquiring and releasing a spinlock |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |