CN105700939B - 一种分布式***中多线程同步的方法和*** - Google Patents
一种分布式***中多线程同步的方法和*** Download PDFInfo
- Publication number
- CN105700939B CN105700939B CN201610256779.2A CN201610256779A CN105700939B CN 105700939 B CN105700939 B CN 105700939B CN 201610256779 A CN201610256779 A CN 201610256779A CN 105700939 B CN105700939 B CN 105700939B
- Authority
- CN
- China
- Prior art keywords
- resource
- thread
- condition
- node
- waiting list
- 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
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
-
- 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/465—Distributed object oriented systems
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明提供一种分布式***中多线程同步的方法和***,能够支持自定义条件对线程同步的灵活控制,做到线程主动释放资源以及精确唤醒相关等待线程,资源利用率高。本发明的分布式***中多线程同步的方法包括:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
Description
技术领域
本发明涉及计算机及其软件技术领域,特别地涉及一种分布式***中多线程同步的方法和***。
背景技术
当使用多个线程来访问同一个数据时,非常容易出现安全问题,例如:多个线程都在操作同一数据导致数据不一致的问题等。因此,我们需要用同步机制来解决这些问题,也就是线程同步。线程同步是指在多个线程同时访问同一资源的时候,需要保证该资源每次只能被一个线程独占。现在主流的做法是对数据分块,达到数据隔离。但是,有些应用不得不利用分布式***中的线程同步。
在分布式***中,由于应用程序部署在不同的机器上,而在不同机器之间,程序无法共享使用内存信息,所以不同机器的多个线程间的同步是困难的。因此,分布式同步是程序开发的时候尽量需要避免的。
现有的分布式***中线程同步的方法主要是,所有线程都通过指定的缓存中间件(或者数据库)来修改指定资源记录的占有状态,这些中间件本身是具有原子性。当多个线程同时去修改某个资源状态的时候,最多只有一个线程能够修改成功。此处,修改成功的就可以被认为是抢占资源成功。
然而,现有的分布式***中线程同步的方法具有如下的缺陷:
1、所有线程都是通过主动轮询的方式来查询是否可以访问资源,效率低;并且当资源被释放后,缺少通知同步线程的机制;
2、不支持灵活自定义的多条件的线程同步,即:各个线程可根据自定义的条件主动选择阻塞或者根据自定义的条件唤醒相应的线程。
发明内容
有鉴于此,本发明提供一种分布式***中多线程同步的方法和***,通过异步监听实现分布式***中的多线程同步,能够支持自定义条件对线程同步的灵活控制,做到线程主动释放资源以及精确唤醒相关等待线程,资源利用率高。
为实现上述目的,根据本发明的一个方面,提供了一种分布式***中多线程同步的方法。
一种分布式***中多线程同步的方法,包括:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
可选地,读取所述资源的资源节点的数据的步骤包括:当所述资源存在,则直接获取所述资源的资源节点,否则根据所述资源名创建相应的资源节点,并读取所述资源节点的数据。
可选地,读取所述资源的资源节点的数据之后,还包括:对所述资源进行校验,以确定所述资源有效且未被锁定。
可选地,还包括:通过在所述资源节点下创建资源锁定节点来锁定所述资源,并通过删除所述资源锁定节点来释放所述资源。
可选地,所述资源节点下包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。
可选地,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。
可选地,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
根据本发明的另一方面,提供了一种分布式***中多线程同步的***。
一种分布式***中多线程同步的***,包括:用于接收线程的资源控制请求的装置,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;用于根据所述资源名读取所述资源的资源节点的数据的装置;用于尝试锁定所述资源的装置,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
可选地,所述资源节点下包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。
可选地,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。
可选地,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
根据本发明的又一方面,提供了一种分布式***中多线程同步的***。
一种分布式***中多线程同步的***,包括:存储器和处理器,其中,所述存储器存储指令;所述处理器执行所述指令用于:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
根据本发明的技术方案,通过基于分布式线程同步组件Zookeeper实现分布式***中多机器线程对资源的控制和主动释放,利用Zookeeper的回调监听机制来通知客户端进行相关线程的分布式同步调用资源,极大提高了分布式线程同步的效率;同时本发明还支持自定义条件对线程同步的灵活控制,从而做到了线程主动释放资源以及根据自定义条件唤醒相关线程,进而可以控制线程的执行顺序,且资源利用率高。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施方式的分布式***中多线程同步的方法的主要步骤示意图;
图2是本发明实施例的多线程同步树形结构图;
图3是本发明实施例的多线程获取资源的流程图;
图4是根据本发明实施方式的分布式***中多线程同步的***的主要模块示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施方式的分布式***中多线程同步的方法的主要步骤示意图。如图1所示,本发明的分布式***中多线程同步的方法主要包括如下的步骤S11至步骤S13。
步骤S11:接收线程的资源控制请求,该请求具有参数,参数包括线程的标识和所请求资源的资源名;
步骤S12:根据资源名读取资源的资源节点的数据;
步骤S13:尝试锁定资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待该线程利用该资源完成执行后,释放该资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定该资源。
其中,步骤S12中读取资源的资源节点的数据的步骤包括:当所述资源存在,则直接获取所述资源的资源节点,否则根据所述资源名创建相应的资源节点,并读取所述资源节点的数据。
并且,在读取资源的资源节点的数据之后,还可以包括:对所述资源进行校验,以确定所述资源有效且未被锁定。
根据本发明的技术方案,通过在所述资源节点下创建资源锁定节点来锁定所述资源,并通过删除所述资源锁定节点来释放所述资源。
并且,在每个资源节点下可以包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。
线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。并且,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
图2是本发明实施例的多线程同步树形结构图。本发明作为分布式***中多线程同步的组件,线程对资源的锁定全部由本发明的线程同步组件来实现,对上层***的线程是透明的。本发明基于Zookeeper进行分布式***中多线程的同步,根据Zookeeper的回调监听机制来通知***中相关线程使用资源进行操作。
如图2所示,表示了整个Zookeeper***中多机器线程及资源存储的树形结构。以“/”来分割每一级节点。其中,/synchor/clients下的所有的子节点是表示使用本发明进行线程同步的服务器节点。每个服务器节点存了该服务器的IP地址、该服务器的唯一标识、以及该服务器所使用的操作***类型等基本信息,且这些基本信息是由服务器在启动的时候推送到本发明的组件并在Zookeeper的相应节点进行注册。/synchro/rsLocks下的所有节点表示的是所有的使用到的资源信息对应的节点。每个资源节点是动态生成的,且每个资源节点下包含了同步队列节点(synQueues),占用线程节点(locked),和自定义条件集合(conditions)节点。其中,同步队列包括等待控制该资源的线程;占用线程是当前控制该资源的线程;自定义条件集合,是可以动态指定生成的,但是已定的条件节点下如有线程在等待,则该条件不会变化,如需增加新的条件可添加新的节点来实现,并且该自定义条件集合中每个条件具有等待队列。
另外,本发明中对资源定义例如可以是字符串,在整个分布式环境中不同的字符串内容就表示不同的资源。
图3是本发明实施例的多线程获取资源的流程图。如图3所示,本发明中,分布式***中的多服务器线程会主动申请获取资源。
当分布式***中,某台服务器上的某线程申请控制某资源时,会发送资源控制请求到本发明的分布式同步组件Zookeeper,其中,资源控制请求的参数中包括该服务器的唯一标识、该线程的唯一标识以及请求访问的资源的资源名(说明1)。Zookeeper接收到资源控制请求后,会对该请求的参数,进行初步解析和初始化(说明2),以获取该请求中包含的资源名。然后,Zookeeper会根据资源名查找并尝试获取该资源节点的值。此时,Zookeeper会先判断当前资源节点是否存在(说明3),如果该资源节点存在,则会通知该线程直接读取该资源节点的值;如果该资源节点不存在,则会先根据资源名创建相应的节点,然后再读取该资源节点的值(说明4)。在获取该资源节点的值后,会进行信息校验,一是校验该资源节点的资源是否为所需要的资源,以及该资源节点的内容是否已过期等,亦即校验该资源节点的值是否有效;二是根据该资源节点的值判定该资源节点是否已被锁定(有其他线程正在使用该资源),其中,该资源节点若已被锁定,会包含已锁定的标识信息。
当该线程获取到该资源节点的值,且验证所述资源有效且未被锁定后,Zookeeper会尝试锁定该资源以避免其他线程同时使用该资源。本发明通过在资源节点下创建资源锁定节点来锁定资源。例如,本发明对资源锁定的方式是直接创建/synchro/rsLocks/资源名称节点/locked,其中,“/locked”即为资源锁定节点。如果创建成功,则说明当前锁定成功,且该资源锁定节点的值为“服务器唯一标识+线程唯一标识”。如果在创建资源锁定节点时,返回此节点已经存在,则比较资源锁定节点“/locked”的值与资源控制请求的参数中包含的“服务器唯一标识+线程唯一标识”是否一致,如果一致,则说明该资源已经被该线程获取,返回锁定成功,否则锁定失败(说明5)。
如果返回锁定资源成功,则该线程根据自定义的条件逻辑执行后续的操作,且在操作完成或者在需要主动释放资源的情况下会释放资源并阻塞该线程,以便其他线程可以控制该资源(说明9)。其中,需要主动释放资源的情况会在后文中进行详细介绍,此处略过。如果返回锁定资源失败,则直接将该线程放入/synchro/rsLocks/资源节点/synQueues/节点下,表示该线程在等待资源被释放(说明6)。同时,在锁定资源失败后,服务器本地会得到返回结果,并在本地将线程信息缓存起来。在进行线程信息缓存时,可以键名-键值对(Key-value)的形式进行存储,其中键名Key为“服务器唯一标识+线程唯一标识”。同时线程会立刻阻塞不可用(说明7)。并且,在其他线程执行完成并且释放资源后,根据预设的线程执行顺序会被唤醒变成可用,并重新尝试锁定资源。
其中,在一个线程执行完预定的逻辑后,会尝试释放资源。资源释放的过程如下:首先,Zookeeper会删除资源锁定节点“/locked”,然后,会将/synchro/rsLocks/资源节点/synQueues/下的一个节点取出。由于Zookeeper的客户端监听了相应资源节点,当对资源节点下的等待队列(synQueues)删除节点的时候,会通知所有相关的服务器。服务器节点收到回调通知后,判定当前移出该资源节点下的等待队列的节点是否是与自己相关的节点,如果是,就会以“服务器唯一标识+线程唯一标识”为键名Key,从服务器本地内存中取出对应的线程信息,让线程变得可用,并且该线程会重新去申请资源(说明8)。
当一个线程执行完对应的逻辑操作并释放资源后,Zookeeper会从资源的等待同步队列synQueues中取出其他节点并尝试锁定资源(说明9)。Zookeeper在从等待同步队列synQueues中取出节点时,可灵活设置规则,例如:可公平取出(采用公平锁),即:将等待同步队列中的第一个节点取出;也可不公平取出(采用不公平锁),最简单的即为随机取出,任何线程都可尝试锁定资源;还可设置规则例如根据所有线程请求控制资源的时间的先后顺序来取等,例如:当一个线程执行完对应的逻辑操作并释放资源后,资源节点下的条件队列“/synchro/rsLocks/rs/condtions/conditon1”中所有符合条件conditon1的线程都会转移到等待同步队列中,此时可根据等待同步队列中所有线程的资源控制请求时间来排序并依次取出各线程。
另外,本发明还可以实现根据自定义条件主动控制资源锁。本发明中线程对资源的占用分为主动占用和被动占用两种。基于自定义条件执行线程同步是控制线程按照预设的执行顺序执行的重要手段。当某个线程已经获取了资源后,发现其中某些自定义的条件还未满足,则该线程会主动阻塞当前线程,并且释放当前资源以便其他线程可以使用该资源。待其他线程执行完成且该线程已满足所有自定义条件时,该线程会被重新唤醒并继续执行自身的代码逻辑。
本发明中线程根据自定义条件执行线程同步的步骤为:
步骤A:服务器s1上的线程a获取到资源(rs),则Zookeeper会执行写/synchro/rsLocks/rs/locked节点;
步骤B:线程a在执行过程中,发现执行的条件(condition1)不满足,就会将condition1和该线程的信息(服务器唯一标识+线程a的唯一标识)传到本发明的线程同步组件Zookeeper,以申请阻塞当前线程,并且,该线程被重新唤醒的条件为即为“满足条件condition1”;
步骤C:Zookeeper在收到该线程的阻塞请求后,会将“/synchro/rsLocks/rs/locked”节点的信息复制到一个新创建的节点:“/synchro/rsLocks/rs/condtions/conditon1/s1_a”;
步骤D:然后,删除上述的locked节点,说明当前资源已经被释放,且线程a被阻塞,状态变成不可用;
步骤E:当其他线程获取资源并且执行完某些操作,尝试唤醒“条件condition1”下的线程时,本发明的线程同步组件Zookeeper会将“/synchro/rsLocks/rs/condtions/conditon1/s1_a”节点的信息转移到“/synchro/rsLocks/rs/synQueues/s1_a”节点,表示该线程已经从“条件condition1”的等待队列移动到该资源的等待队列中,并根据预定的线程取出规则(如前所述的公平取出、不公平取出或者其他自定义规则等)唤醒s1服务器上的a线程,让其重新申请锁定资源,然后继续执行代码逻辑。
另外,本发明还提出了一种分布式***中多线程同步的***,主要包括:用于接收线程的资源控制请求的装置,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;用于根据所述资源名读取所述资源的资源节点的数据的装置;用于尝试锁定所述资源的装置,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
本发明中,所述资源节点下包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。
根据本发明的技术方案,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。并且,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
图4是根据本发明实施方式的分布式***中多线程同步的***的主要模块示意图。如图4所示,本发明的分布式***中多线程同步的***40主要包括存储器41和处理器42。
其中,存储器41存储指令;处理器42执行所述指令用于:接收线程的资源控制请求,所述请求的参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源;当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。
根据本发明实施例的技术方案,通过基于分布式线程同步组件Zookeeper实现分布式***中多机器线程对资源的控制和主动释放,利用Zookeeper的回调监听机制来通知客户端进行相关线程的分布式同步调用资源,极大提高了分布式线程同步的效率;同时本发明还支持自定义条件对线程同步的灵活控制,从而做到了线程主动释放资源以及根据自定义条件唤醒相关线程,进而可以控制线程的执行顺序,且资源利用率高。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种分布式***中多线程同步的方法,其特征在于,包括:
接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;
根据所述资源名读取所述资源的资源节点的数据;
尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并通过回调监听机制唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源,其中,所述资源节点下包含自定义条件集合,所述自定义条件集合中的每个条件具有等待队列,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
2.根据权利要求1所述的方法,其特征在于,读取所述资源的资源节点的数据的步骤包括:
当所述资源存在,则直接获取所述资源的资源节点,否则根据所述资源名创建相应的资源节点,并读取所述资源节点的数据。
3.根据权利要求1所述的方法,其特征在于,读取所述资源的资源节点的数据之后,还包括:
对所述资源进行校验,以确定所述资源有效且未被锁定。
4.根据权利要求1所述的方法,其特征在于,还包括:通过在所述资源节点下创建资源锁定节点来锁定所述资源,并通过删除所述资源锁定节点来释放所述资源。
5.根据权利要求2所述的方法,其特征在于,所述资源节点下包含如下部分,其中,
同步队列,所述同步队列包括等待控制所述资源的线程;
占用线程,所述占用线程是当前控制所述资源的线程。
6.一种分布式***中多线程同步的***,其特征在于,包括:
用于接收线程的资源控制请求的装置,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;
用于根据所述资源名读取所述资源的资源节点的数据的装置;
用于尝试锁定所述资源的装置,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并通过回调监听机制唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源,其中,所述资源节点下包含自定义条件集合,所述自定义条件集合中的每个条件具有等待队列,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
7.根据权利要求6所述的***,其特征在于,所述资源节点下包含如下部分,其中,
同步队列,所述同步队列包括等待控制所述资源的线程;
占用线程,所述占用线程是当前控制所述资源的线程。
8.一种分布式***中多线程同步的***,其特征在于,包括:
存储器和处理器,其中,
所述存储器存储指令;
所述处理器执行所述指令用于:
接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;
根据所述资源名读取所述资源的资源节点的数据;
尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并通过回调监听机制唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源,其中,所述资源节点下包含自定义条件集合,所述自定义条件集合中的每个条件具有等待队列,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。
9.一种分布式***中多线程同步的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610256779.2A CN105700939B (zh) | 2016-04-21 | 2016-04-21 | 一种分布式***中多线程同步的方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610256779.2A CN105700939B (zh) | 2016-04-21 | 2016-04-21 | 一种分布式***中多线程同步的方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105700939A CN105700939A (zh) | 2016-06-22 |
CN105700939B true CN105700939B (zh) | 2019-07-02 |
Family
ID=56217406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610256779.2A Active CN105700939B (zh) | 2016-04-21 | 2016-04-21 | 一种分布式***中多线程同步的方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105700939B (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107818017B (zh) * | 2016-09-14 | 2021-09-03 | 北京京东尚科信息技术有限公司 | 多线程计算***及其数据处理方法、装置和计算机可读存储介质 |
CN106445703A (zh) * | 2016-09-22 | 2017-02-22 | 济南浪潮高新科技投资发展有限公司 | 一种解决数据传输中防并发脏读方法 |
CN107861799B (zh) * | 2016-12-28 | 2020-12-25 | 平安科技(深圳)有限公司 | 基于多线程环境的任务处理方法及装置 |
CN106790694B (zh) * | 2017-02-21 | 2020-04-14 | 广州爱九游信息技术有限公司 | 分布式***及分布式***中目标对象的调度方法 |
CN106919713B (zh) * | 2017-03-13 | 2021-03-16 | 苏州浪潮智能科技有限公司 | 一种集群文件***及分布式文件***多客户端文件控制方法 |
CN107229525A (zh) * | 2017-04-27 | 2017-10-03 | 国电南瑞科技股份有限公司 | 一种基于Zookeeper的电力***设备模型关键字生成方法 |
CN107423454B (zh) * | 2017-09-22 | 2021-01-12 | 苏州浪潮智能科技有限公司 | 一种分布式文件***中文件锁的处理方法、装置及设备 |
CN108304251B (zh) * | 2018-02-06 | 2021-11-19 | 网宿科技股份有限公司 | 线程同步方法及服务器 |
CN108563487B (zh) * | 2018-04-28 | 2021-10-01 | 北京小米移动软件有限公司 | 用户界面的更新方法及装置 |
JP7042709B2 (ja) * | 2018-06-28 | 2022-03-28 | ルネサスエレクトロニクス株式会社 | 半導体装置、制御システムおよび半導体装置の制御方法 |
CN109120550B (zh) * | 2018-07-18 | 2019-10-08 | 武汉绿色网络信息服务有限责任公司 | 一种无锁化处理方法和装置 |
CN109309631A (zh) * | 2018-08-15 | 2019-02-05 | 新华三技术有限公司成都分公司 | 一种基于通用网络文件***写入数据的方法及装置 |
CN111813536B (zh) | 2019-04-11 | 2024-06-11 | 华为技术有限公司 | 任务处理方法、装置、终端以及计算机可读存储介质 |
CN112631802B (zh) * | 2019-04-29 | 2024-04-12 | 杭州涂鸦信息技术有限公司 | 一种线程间通信方法及相关装置 |
CN110175080A (zh) * | 2019-05-29 | 2019-08-27 | 上海有谱网络科技有限公司 | 进销存软件中保证数据线程安全的方法 |
CN110611746B (zh) * | 2019-09-03 | 2021-06-29 | 深圳市云网万店电子商务有限公司 | 一种多摄像头同步方法及分布式*** |
CN111552574A (zh) * | 2019-09-25 | 2020-08-18 | 华为技术有限公司 | 一种多线程同步方法及电子设备 |
CN110597923B (zh) * | 2019-09-29 | 2024-02-02 | 腾讯云计算(北京)有限责任公司 | 区块链资源管理方法、装置及存储介质 |
CN111163140A (zh) * | 2019-12-20 | 2020-05-15 | 深圳市中农易讯信息技术有限公司 | 资源获取和分配的方法、装置和计算机可读存储介质 |
CN112099929A (zh) * | 2020-09-07 | 2020-12-18 | 中电科仪器仪表有限公司 | 一种适用于射频芯片并行测试的测试资源调度管理方法 |
CN113296934A (zh) * | 2020-10-30 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 调度进程的方法以及装置 |
CN113190624A (zh) * | 2021-05-21 | 2021-07-30 | 中国工商银行股份有限公司 | 基于分布式跨容器的异步转同步调用方法及装置 |
CN113641477B (zh) * | 2021-08-17 | 2024-08-16 | 南方电网数字平台科技(广东)有限公司 | 基于Zookeeper的线程调度方法及装置 |
CN114428649B (zh) * | 2022-01-26 | 2024-03-05 | 上海燧原科技股份有限公司 | 一种可配置的硬件资源同步装置及方法 |
CN117112245B (zh) * | 2023-10-23 | 2023-12-26 | 深圳市计通智能技术有限公司 | 一种基于设备联动的多线程同步创建方法和*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN101256509A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种锁机制的加锁方法、解锁方法和实现方法 |
CN101697136A (zh) * | 2009-10-27 | 2010-04-21 | 金蝶软件(中国)有限公司 | 一种资源控制方法和装置 |
CN103092703A (zh) * | 2011-10-31 | 2013-05-08 | 国际商业机器公司 | Java资源访问的同步方法和装置 |
CN104702655A (zh) * | 2014-03-21 | 2015-06-10 | 杭州海康威视***技术有限公司 | 云存储资源分配方法及其*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4995101B2 (ja) * | 2005-02-28 | 2012-08-08 | テクラテック・アクティーゼルスカブ | 共有リソースへのアクセスを制御する方法及びシステム |
US7426653B2 (en) * | 2005-04-13 | 2008-09-16 | Progress Software Corporation | Fault tolerant distributed lock management |
-
2016
- 2016-04-21 CN CN201610256779.2A patent/CN105700939B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN101256509A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种锁机制的加锁方法、解锁方法和实现方法 |
CN101697136A (zh) * | 2009-10-27 | 2010-04-21 | 金蝶软件(中国)有限公司 | 一种资源控制方法和装置 |
CN103092703A (zh) * | 2011-10-31 | 2013-05-08 | 国际商业机器公司 | Java资源访问的同步方法和装置 |
CN104702655A (zh) * | 2014-03-21 | 2015-06-10 | 杭州海康威视***技术有限公司 | 云存储资源分配方法及其*** |
Also Published As
Publication number | Publication date |
---|---|
CN105700939A (zh) | 2016-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105700939B (zh) | 一种分布式***中多线程同步的方法和*** | |
CN106790694B (zh) | 分布式***及分布式***中目标对象的调度方法 | |
US10116766B2 (en) | Asynchronous and idempotent distributed lock interfaces | |
US6622155B1 (en) | Distributed monitor concurrency control | |
US9430388B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
CN104216767B (zh) | 多线程之间访问共享数据的方法及装置 | |
TW412692B (en) | Parallel file system and method with a metadata node | |
CN108694199A (zh) | 数据同步装置、方法、存储介质及电子设备 | |
US20120102506A1 (en) | Web service patterns for globally distributed service fabric | |
CN110971700B (zh) | 分布式锁的实现方法及装置 | |
US11675622B2 (en) | Leader election with lifetime term | |
CN113760513B (zh) | 一种分布式任务调度方法、装置、设备和介质 | |
CN112269781A (zh) | 数据生命周期管理方法、装置、介质及电子设备 | |
CN114064414A (zh) | 一种高可用的集群状态监控方法及*** | |
Memishi et al. | Fault tolerance in MapReduce: A survey | |
CN112540829A (zh) | 容器组驱逐方法、装置、节点设备及存储介质 | |
US10191959B1 (en) | Versioned read-only snapshots of shared state in distributed computing environments | |
JP2022521412A (ja) | 分散システムにおける非同期ストレージ管理 | |
Al-Bayati et al. | Task placement and selection of data consistency mechanisms for real-time multicore applications | |
US20140289725A1 (en) | Threads in operating systems without kernel thread support | |
JP5776813B2 (ja) | マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム | |
CN112463419B (zh) | 基于中间件的主备节点工作方法及装置、电子设备 | |
CN117742979B (zh) | 一种面向时空数据处理的分布式锁方法及电子设备 | |
CN116821058B (zh) | 元数据访问方法、装置、设备及存储介质 | |
CN112596741B (zh) | 一种视频监控服务部署方法及装置 |
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 |