一种分布式系统中多线程同步的方法和系统技术方案

技术编号:13455541 阅读:110 留言:0更新日期:2016-08-02 20:31
本发明专利技术提供一种分布式系统中多线程同步的方法和系统,能够支持自定义条件对线程同步的灵活控制,做到线程主动释放资源以及精确唤醒相关等待线程,资源利用率高。本发明专利技术的分布式系统中多线程同步的方法包括:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。

【技术实现步骤摘要】

本专利技术涉及计算机及其软件
,特别地涉及一种分布式系统中多线程同步的方法和系统
技术介绍
当使用多个线程来访问同一个数据时,非常容易出现安全问题,例如:多个线程都在操作同一数据导致数据不一致的问题等。因此,我们需要用同步机制来解决这些问题,也就是线程同步。线程同步是指在多个线程同时访问同一资源的时候,需要保证该资源每次只能被一个线程独占。现在主流的做法是对数据分块,达到数据隔离。但是,有些应用不得不利用分布式系统中的线程同步。在分布式系统中,由于应用程序部署在不同的机器上,而在不同机器之间,程序无法共享使用内存信息,所以不同机器的多个线程间的同步是困难的。因此,分布式同步是程序开发的时候尽量需要避免的。现有的分布式系统中线程同步的方法主要是,所有线程都通过指定的缓存中间件(或者数据库)来修改指定资源记录的占有状态,这些中间件本身是具有原子性。当多个线程同时去修改某个资源状态的时候,最多只有一个线程能够修改成功。此处,修改成功的就可以被认为是抢占资源成功。然而,现有的分布式系统中线程同步的方法具有如下的缺陷:1、所有线程都是通过主动轮询的方式来查询是否可以访问资源,效率低;并且当资源被释放后,缺少通知同步线程的机制;2、不支持灵活自定义的多条件的线程同步,S卩:各个线程可根据自定义的条件主动选择阻塞或者根据自定义的条件唤醒相应的线程。
技术实现思路
有鉴于此,本专利技术提供一种分布式系统中多线程同步的方法和系统,通过异步监听实现分布式系统中的多线程同步,能够支持自定义条件对线程同步的灵活控制,做到线程主动释放资源以及精确唤醒相关等待线程,资源利用率高。为实现上述目的,根据本专利技术的一个方面,提供了一种分布式系统中多线程同步的方法。—种分布式系统中多线程同步的方法,包括:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。可选地,读取所述资源的资源节点的数据的步骤包括:当所述资源存在,则直接获取所述资源的资源节点,否则根据所述资源名创建相应的资源节点,并读取所述资源节点的数据。可选地,读取所述资源的资源节点的数据之后,还包括:对所述资源进行校验,以确定所述资源有效且未被锁定。可选地,还包括:通过在所述资源节点下创建资源锁定节点来锁定所述资源,并通过删除所述资源锁定节点来释放所述资源。可选地,所述资源节点下包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。可选地,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。可选地,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。根据本专利技术的另一方面,提供了一种分布式系统中多线程同步的系统。—种分布式系统中多线程同步的系统,包括:用于接收线程的资源控制请求的装置,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;用于根据所述资源名读取所述资源的资源节点的数据的装置;用于尝试锁定所述资源的装置,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。可选地,所述资源节点下包含如下部分,其中,同步队列,所述同步队列包括等待控制所述资源的线程;占用线程,所述占用线程是当前控制所述资源的线程;自定义条件集合,所述自定义条件集合中的每个条件具有等待队列。可选地,线程在控制所述资源后,如果发现所述自定义条件集合中的条件不满足,则释放所述资源并进入阻塞状态,且该线程的标识被置于该条件的等待队列。可选地,当所述自定义条件集合中的条件满足后,把该条件的等待队列中的线程从该条件的等待队列移动到所述资源的等待队列。根据本专利技术的又一方面,提供了一种分布式系统中多线程同步的系统。一种分布式系统中多线程同步的系统,包括:存储器和处理器,其中,所述存储器存储指令;所述处理器执行所述指令用于:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。根据本专利技术的技术方案,通过基于分布式线程同步组件Zookeeper实现分布式系统中多机器线程对资源的控制和主动释放,利用Zookeeper的回调监听机制来通知客户端进行相关线程的分布式同步调用资源,极大提高了分布式线程同步的效率;同时本专利技术还支持自定义条件对线程同步的灵活控制,从而做到了线程主动释放资源以及根据自定义条件唤醒相关线程,进而可以控制线程的执行顺序,且资源利用率高。【附图说明】附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1是根据本专利技术实施方式的分布式系统中多线程同步的方法的主要步骤示意图;图2是本专利技术实施例的多线程同步树形结构图;图3是本专利技术实施例的多线程获取资源的流程图;图4是根据本专利技术实施方式的分布式系统中多线程同步的系统的主要模块示意图。【具体实施方式】以下结合附图对本专利技术的示范性实施例做出说明,其中包括本专利技术实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识至IJ,可以对这里描述的实施例做出各种改变和修改,而不会背离本专利技术的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。图1是根据本专利技术实施方式的分布式系统中多线程同步的方法的主要步骤示意图。如图1所示,本专利技术的分布式系统中多线程同步的方法主要包括如下的步骤Sll至步骤S13。步骤Sll:接收线程的资源控制请求,该请求具有参数,参数包括线程的标识和所请求资源的资源名;步骤S12:根据资源名读取资源的资源节点的数据;步骤S13:尝试锁定资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待该线程利用该资源完成执行后,释放该资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定该资源。其中,步骤S12中读取资源的资源节点的数据的步骤包括:当所述资源存在,则直接获取所述资源的资源节点,否则根据所述资源名创建相应的资源节点,并读取所述资源节点的数据。并且,在读取资源的资源节点的数据之后,还可以包括:对所述资本文档来自技高网...

【技术保护点】
一种分布式系统中多线程同步的方法,其特征在于,包括:接收线程的资源控制请求,所述请求具有参数,所述参数包括所述线程的标识和所请求资源的资源名;根据所述资源名读取所述资源的资源节点的数据;尝试锁定所述资源,其中当锁定失败,把该线程的标识置于该资源的等待队列以使得该线程进入阻塞状态,当锁定成功,则该线程控制该资源,并且待所述线程利用所述资源完成执行后,释放所述资源,并唤醒该资源的等待队列中的其他线程,其中被唤醒的线程能够尝试锁定所述资源。

【技术特征摘要】

【专利技术属性】
技术研发人员:魏亚文孙政
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

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

1