一种线程同步方法及线程同步系统技术方案

技术编号:15878585 阅读:20 留言:0更新日期:2017-07-25 16:34
本申请公开了一种线程同步方法及线程同步系统,其中,所述线程同步方法通过所述析构函数来保证线程访问任一所述保护区域成功后将所述第一变量的状态更改为第一状态,以释放在所述线程访问过程中对于所述保护区域的锁定,从而实现及时释放所述保护区域的目的;并且在当正在访问所述保护区域的线程被杀掉时,也不会影响析构函数的正常运行,从而避免了由于正在访问所述保护区域的线程被杀掉而可能导致的死锁现象出现。并且所述线程同步方法实现了以一个变量的状态来控制所有所述保护区域是否可被访问的状态,从而实现所有所述保护区域的状态处于可控状态的目的。

Thread synchronization method and thread synchronization system

The invention discloses a method of thread synchronization and thread synchronization system, wherein, the thread synchronization method by the destructor to ensure thread access to any of the protective region will change after the success of the first variable state is the first state to release in the thread access process for locking the protected area. Thus, the timely release of the protected area and purpose; when visiting the protected area thread is killed, will not affect the normal operation of the destructor, to avoid deadlock is to access the protected area the thread is killed off and may lead to the emergence of. And the method of thread synchronization is achieved with a variable to control the status of all the protection areas are accessible, so as to realize the protection of all regions of the state under control purposes.

【技术实现步骤摘要】
一种线程同步方法及线程同步系统
本申请涉及计算机应用
,更具体地说,涉及一种线程同步方法及线程同步系统。
技术介绍
多线程操作可以实现充分利用系统资源,缩短程序响应时间和改善用户体验的目的,因此广泛应用于各类计算机程序中。线程同步是多线程操作中不可或缺的步骤,合理有效的线程同步能够有效地保证数据的正确性和程序的正常运行。由于在系统中存在一些敏感数据,这些敏感数据不允许被多个线程同时访问,此时就需要对多线程进行线程同步,以保证在同一时间只有一个线程访问包含敏感数据的保护区域,从而保证敏感数据的完整性。线程同步是指多线程之间的协同步调,即多线程之间按照预定的先后次序访问保护区域。现有技术中对多线程进行线程同步的方法主要包括“临界区法”“事件法”“互斥量法”和“信号量法”,但是在实际应用过程中,这些线程同步方法都可能会存在当访问保护区域的线程被杀掉,而导致的保护区域得不到释放或重置的情况出现,在这种情况下,其他线程无法访问保护区域,导致死锁。
技术实现思路
为解决上述技术问题,本专利技术提供了一种线程同步方法及线程同步系统,以实现避免由于当访问保护区域的线程被杀掉而可能出现的死锁现象。为实现上述技术目的,本专利技术实施例提供了如下技术方案:一种线程同步方法,包括:定义全局变量,所述全局变量包括第一变量和第二变量,所述第一变量包括第一状态和第二状态,所述第二变量用于对所述第一变量进行加锁操作;在每个保护区域中新建互斥锁类对象,类包括析构函数和指针成员变量,所述指针成员变量用于保存所述第一变量和第二变量;将所述第一变量和第二变量均以指针参数形式传入所有所述互斥锁类对象的构造函数中,所述第一变量包括第一状态和第二状态,所述第一变量所处状态用于标识所述保护区域是否可被线程访问;当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问。可选的,当所述第一变量处于第一状态时,所有所述保护区域处于可被线程访问状态,当所述第一变量处于第二状态时,所有所述保护区域处于不可被线程访问状态。可选的,所述当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问包括:当所述线程请求访问任一所述保护区域时,获取所述第一变量所处状态,判断所述第一变量状态是否处于第一状态,如果是,则访问所述保护区域,并利用所述第二变量对所述第一变量进行加锁操作,并将所述第一变量的状态更改为第二状态,当该线程访问成功后在所述析构函数中将所述第一变量的状态更改为第一状态;如果否,则判断访问时间是否超时,若否,则在预设时间后返回获取所述第一变量所处状态的步骤。可选的,所述获取所述第一变量所处状态包括:利用查询函数获取所述第一变量所处状态。一种线程同步系统,包括:变量定义模块,用于定义全局变量,所述全局变量包括第一变量和第二变量,所述第一变量包括第一状态和第二状态,所述第二变量用于对所述第一变量进行加锁操作;类定义模块,用于在每个保护区域中新建互斥锁类对象,类包括构造函数、析构函数和用于保存所述第一变量和第二变量的指针成员变量;传入模块,用于将所述第一变量和第二变量均以指针参数形式传入所有所述互斥锁类对象的构造函数中,所述第一变量包括第一状态和第二状态,所述第一变量所处状态用于标识所述保护区域是否可被线程访问;判断模块,用于当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问。可选的,当所述第一变量处于第一状态时,所有所述保护区域处于可被线程访问状态,当所述第一变量处于第二状态时,所有所述保护区域处于不可被线程访问状态。可选的,所述第一变量为布尔型变量,所述第一状态为False,第二状态为True;所述第二变量为线程锁变量。可选的,所述判断模块具体用于,当所述线程请求访问任一所述保护区域时,获取所述第一变量所处状态,判断所述第一变量状态是否处于第一状态,如果是,则访问所述保护区域,并利用所述第二变量对所述第一变量进行加锁操作,并将所述第一变量的状态更改为第二状态,当该线程访问成功后在所述析构函数中将所述第一变量的状态更改为第一状态;如果否,则判断访问时间是否超时,若否,则在预设时间后返回获取所述第一变量所处状态的步骤。可选的,所述判断模块获取所述第一变量所处状态具体用于,利用查询函数获取所述第一变量所处状态。从上述技术方案可以看出,本专利技术实施例提供了一种线程同步方法及线程同步系统,其中,所述线程同步方法通过析构函数来保证线程访问任一保护区域成功后在析构函数中更改第一变量所处状态以使保护区域可被访问,以释放在线程访问过程中对于保护区域的锁定,从而实现及时释放所述保护区域的目的;并且在当正在访问所述保护区域的线程被杀掉时,也不会影响析构函数的正常运行,从而避免了由于正在访问所述保护区域的线程被杀掉而可能导致的死锁现象出现。并且所述线程同步方法通过第一变量所处状态来反映保护区域的可访问状态,通过定义第二变量来对第一变量进行加锁以进行保护,并且第一变量和第二变量以指针参数的形式传入所有互斥锁类对象的构造函数中,实现以一个变量的状态来控制所有保护区域是否可被访问的状态,从而实现所有保护区域的状态处于可控状态的目的。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本申请的一个实施例提供的一种线程同步方法的流程示意图;图2为本申请的另一个实施例提供的一种线程同步方法的流程示意图;图3为本申请的又一个实施例提供的一种线程同步方法的流程示意图;图4为本申请一个实施例提供的一种线程同步系统的结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本申请实施例提供了一种线程同步方法,如图1所示,包括:S101:定义全局变量,全局变量包括第一变量和第二变量,第一变量包括第一状态和第二状态,第二变量用于对第一变量进行加锁操作;S102:在每个保护区域中新建互斥锁类对象,类包括析构函数和指针成员变量,指针成员变量用于保存第一变量和第二变量;S103:将第一变量和第二变量均以指针参数形式传入所有互斥锁类对象的构造函数中,第一变量包括第一状态和第二状态,第一变量所处状态用于标识保护区域是否可被线程访问;S104:当线程请求访问任一保护区域时,根据第一变量所处状态判断保护区域是否可被访本文档来自技高网...
一种线程同步方法及线程同步系统

【技术保护点】
一种线程同步方法,其特征在于,包括:定义全局变量,所述全局变量包括第一变量和第二变量,所述第一变量包括第一状态和第二状态,所述第二变量用于对所述第一变量进行加锁操作;在每个保护区域中新建互斥锁类对象,类包括析构函数和指针成员变量,所述指针成员变量用于保存所述第一变量和第二变量;将所述第一变量和第二变量均以指针参数形式传入所有所述互斥锁类对象的构造函数中,所述第一变量包括第一状态和第二状态,所述第一变量所处状态用于标识所述保护区域是否可被线程访问;当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问。

【技术特征摘要】
1.一种线程同步方法,其特征在于,包括:定义全局变量,所述全局变量包括第一变量和第二变量,所述第一变量包括第一状态和第二状态,所述第二变量用于对所述第一变量进行加锁操作;在每个保护区域中新建互斥锁类对象,类包括析构函数和指针成员变量,所述指针成员变量用于保存所述第一变量和第二变量;将所述第一变量和第二变量均以指针参数形式传入所有所述互斥锁类对象的构造函数中,所述第一变量包括第一状态和第二状态,所述第一变量所处状态用于标识所述保护区域是否可被线程访问;当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问。2.根据权利要求1所述的线程同步方法,其特征在于,当所述第一变量处于第一状态时,所有所述保护区域处于可被线程访问状态,当所述第一变量处于第二状态时,所有所述保护区域处于不可被线程访问状态。3.根据权利要求2所述的线程同步方法,其特征在于,所述第一变量为布尔型变量,所述第一状态为False,第二状态为True;所述第二变量为线程锁变量。4.根据权利要求1所述的线程同步方法,其特征在于,所述当所述线程请求访问任一所述保护区域时,根据所述第一变量所处状态判断所述保护区域是否可被访问,在所述保护区域可被访问时访问所述保护区域,并在访问成功后在所述析构函数中更改所述第一变量所处状态以使所述保护区域可被访问包括:当所述线程请求访问任一所述保护区域时,获取所述第一变量所处状态,判断所述第一变量状态是否处于第一状态,如果是,则访问所述保护区域,并利用所述第二变量对所述第一变量进行加锁操作,并将所述第一变量的状态更改为第二状态,当该线程访问成功后在所述析构函数中将所述第一变量的状态更改为第一状态;如果否,则判断访问时间是否超时,若否,则在预设时间后返回获取所述第一变量所处状态的步骤。5.根据权利要求4所述的线程同步方法,其特征在于,所述获...

【专利技术属性】
技术研发人员:陈阳春王雁
申请(专利权)人:北京奇艺世纪科技有限公司
类型:发明
国别省市:北京,11

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

1