一种线程访问临界区的方法、系统和终端设备的制作方法

文档序号:6368541阅读:117来源:国知局
专利名称:一种线程访问临界区的方法、系统和终端设备的制作方法
技术领域
本发明涉及多线程调用领域,尤其涉及一种线程访问临界区的方法、系统和终端设备。
背景技术
现有技术中,不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。
进程进入临界区的调度原则是I)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。现有技术存在的问题多个进程互斥的访问临界区时,访问效率低,等待时间长,CPU消耗大。

发明内容
本发明实施例的目的在于提出一种线程访问临界区的方法,旨在解决现有技术多个进程互斥的访问临界区时,访问效率低,等待时间长,CPU消耗大的技术问题。本发明实施例是这样实现的,一种线程访问临界区的方法,所述方法包括步骤创建线程互斥锁变量;创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。本发明实施例的另一目的在于提出一种线程访问临界区的系统,所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块;所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量;所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值;
所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块;所述获取模块,与所述判断模块相连,用于接收所述初始模块发送的获取指令,并获取线程的访问方式,同时发送判断指令到所述判断模块;所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区;
所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述访问方式修改所述线程互斥锁变量中的当前值。本发明实施例的另一目的在于提出一种线程访问临界区的终端设备。本发明的有益效果本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了 CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。


图I是本发明一种线程访问临界区方法的第一优选实施例流程图;图2是本发明32位线程互斥锁变量的结构示意图;图3是本发明一种线程访问临界区方法的第二优选实施例流程图;图4是本发明一种线程访问临界区方法的第三优选实施例流程图;图5是本发明一种线程访问临界区系统的第一优选实施例结构示意图;图6是本发明一种线程访问临界区系统的第二优选实施例结构示意图;图7是本发明一种线程访问临界区系统的第三优选实施例结构示意图;图8是本发明一种线程访问临界区系统的第四优选实施例结构示意图;图9是本发明一种线程访问临界区系统的第五优选实施例结构示意图;图10是本发明一种线程访问临界区系统的第六优选实施例结构示意图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了 CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。实施例一图I是本发明一种线程访问临界区方法的第一优选实施例流程图。所述的方法包括以下步骤S101,创建线程互斥锁变量;所述线程互斥锁变量的位数为CPU —次能处理的最大位数;所述线程互斥锁变量为有符号整数的线程互斥锁变量;所述线程互斥锁变量的最高位为符号位,当所述符号位为O时,表示所述线程互斥锁变量中的值为正整数;当所述符号位为I时,表示所述线程互斥锁变量中的值为负整数;所述线程互斥锁变量的最高位的下一位若为I则表示线程互斥锁空闲,允许线程访问临界区;若为O则表示已经有线程访问临界区;所述线程互斥锁变量的其他位为读锁计数器位,用于存储当前读临界区的线程的
数量;所述线程互斥锁变量的值以补码表示;为便于理解,举例说明,如图2所示为本发明32位线程互斥锁变量lock的结构示意图,其中S200为第O位,S201为第29位,S202为第30位,S203为第31位,其中最高位为S203,S203为符号位,最高位的下一位为S202,其余位S200-S201为读锁计数器;
当有一个线程访问临界区时,所述线程互斥锁变量的值为0x3ffffffT ;当有两个线程访问临界区时,所述线程互斥锁变量的值为0x3ffffffe,以此类推;S102,创建所述线程互斥锁变量的状态值;所述线程互斥锁变量还包括4个状态值,分别是空闲状态值、读状态值、写状态值和读溢出状态值,其中空闲状态值表示线程可以写临界区也可以读临界区;读状态值表示线程可以读临界区;写状态值表示不允许线程读或者写所述临界区;读溢出状态值表示读临界区的线程的数量超出了预定的上限范围,禁止其他线程读所述临界区;为便于理解,以32位CPU举例,创建所述线程互斥锁变量lock的4个状态值为所述空闲状态值为0x40000000 ;所述读状态值为大于O且不等于写状态值的值,取值范围在I至0x3fffffff之间;所述写状态值为0,即0x00000000,当所述线程互斥锁变量的值为写状态值时,不
允许线程读或者写所述临界区;
所述读溢出状态值指所述符号位为I的值;S103,初始化所述线程互斥锁变量为状态值;为便于理解,以32位CPU举例初始化所述线程互斥锁变量lock为空闲状态值0x40000000 ;S104,获取线程的访问方式;所述访问方式包括读访问方式和写访问方式;S105,判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。为便于理解,继续举例假设所述线程互斥锁变量lock的当前值为0x3ffffffc,获取到的线程的访问方式为读访问方式;判断所述线程互斥锁变量lock的当前值0x3ffffffc是否等于所述读状态值,由于当前值0x3ffffffc是在读状态值的取值范围内,所以判断结果为是,则允许所述线程以所述读访问方式访问临界区,并根据所述读访问方式修改所述线程互斥锁变量中的值。实施例二图3是本发明一种线程访问临界区方法的第二优选实施例流程图。所述的方法包括以下步骤S301,创建线程互斥锁变量;所述线程互斥锁变量的位数为CPU —次能处理的最大位数;S302,创建所述线程互斥锁变量的状态值;S303,初始化所述线程互斥锁变量为状态值;S304,获取线程的读访问方式;S305,判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,如是则进入步骤S306 ;若否则进入步骤S308 ;S306,允许所述线程读所述临界区,并根据所述读访问方式将所述线程互斥锁变量中的当前值减I;为便于理解,继续举例假设所述线程互斥锁变量lock的当前值为0x40000000,获取到的线程的访问方式为读访问方式;判断所述线程互斥锁变量lock的当前值0x40000000是否等于所述空闲状态值,由于当前值0x40000000等于所述空闲状态值0x40000000,所以判断结果为是,则允许所述线程以所述读访问方式访问临界区,并根据所述读访问方式将所述线程互斥锁变量lock中的当前值0x40000000减1,这时,所述线程互斥锁变量lock中的当前值为0x3fffffff ;
S307,当所述线程读所述临界区结束后,将所述线程互斥锁变量中的当前值加I ;
为便于理解,继续举例当所述线程读所述临界区结束后,将所述线程互斥锁变量lock中的当前值0x3fffffff加1,这时,所述线程互斥锁变量lock中的当前值为0x40000000,即所述线程互斥锁变量中的当前值又变为空闲状态值,这时候允许线程读临界区或者写临界区;
S308,禁止所述线程读所述临界区。禁止线程读临界区时包括两种情况I)所述线程互斥锁变量中的当前值等于读溢出状态值,即所述线程互斥锁变量的符号位为1,表示读临界区的线程的数量超出了预定的上限范围,则 禁止其他线程读所述临界区;2)所述线程互斥锁变量的当前值等于写状态值,表示有一个线程在写所述临界区,这时禁止其他线程读所述临界区。对上述方案进一步优化在于,所述“将所述线程互斥锁变量中的当前值减I”为原子递减;所述“将所述线程互斥锁变量中的当前值加I”为原子递增;为便于理解,继续举例原子递减为lock-;避免所述线程互斥锁变量在递减时被系统中断;原子递增为lock++ ;避免所述线程互斥锁变量在递增时被系统中断。实施例三图4是本发明一种线程访问临界区方法的第三优选实施例流程图。所述的方法包括以下步骤S401,创建线程互斥锁变量;所述线程互斥锁变量的位数为CPU —次能处理的最大位数;S402,创建所述线程互斥锁变量的状态值;S403,初始化所述线程互斥锁变量为状态值;S404,获取线程的写访问方式;S405,判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则进入步骤S406 ;若否则进入步骤S408 ;只有当所述线程互斥锁变量中的当前值等于空闲状态值时才允许线程写临界区;S406,允许所述线程写所述临界区,并根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值;继续举例,即修改所述线程互斥锁变量中的当前值为所述写状态值0x000000000,这时禁止其他线程读或者写所述临界区;S407,当所述线程写所述临界区结束后,修改所述线程互斥锁变量中的当前值为空闲状态值。继续举例,即修改所述线程互斥锁变量中的当前值为0x400000000,这时其他线程可以读或者写临界区;S408,禁止所述线程写所述临界区。此时,禁止所述线程写所述临界区包括三种情况I)所述线程互斥锁变量中的当前值等于所述写状态值,表示有一个线程在写所述临界区;2)所述线程互斥锁变量中的当前值等于所述读状态值,表示有一个或多个线程在读所述临界区;
3)所述线程互斥锁变量中的值等于所述读溢出值,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区,同理,也禁止其他线程写所述临界区。有益效果本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了 CPU消耗,同时提高了软件产品的市场竞争力。尤其是线、程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。实施例四图5是本发明一种线程访问临界区系统的第一优选实施例结构示意图。所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块;所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量;所述线程互斥锁变量的位数为CPU —次能处理的最大位数;所述线程互斥锁变量为有符号整数的线程互斥锁变量;所述线程互斥锁变量的最高位为符号位,当所述符号位为O时,表示所述线程互斥锁变量中的值为正整数;当所述符号位为I时,表示所述线程互斥锁变量中的值为负整数;所述线程互斥锁变量的最高位的下一位若为I则表示线程互斥锁空闲,允许线程访问临界区;若为O则表示已经有线程访问临界区;所述线程互斥锁变量的其他位为读锁计数器位,用于存储当前读临界区的线程的
数量;所述线程互斥锁变量的值以补码表示;为便于理解,举例说明,如图2所示为本发明32位线程互斥锁变量lock的结构示意图,其中S200为第O位,S201为第29位,S202为第30位,S203为第31位,其中最高位为S203,S203为符号位,最高位的下一位为S202,其余位S200-S201为读锁计数器;当有一个线程访问临界区时,所述线程互斥锁变量的值为0x3fffffff ;当有两个线程访问临界区时,所述线程互斥锁变量的值为0x3ffffffe,以此类推;所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值;所述线程互斥锁变量还包括4个状态值,分别是空闲状态值、读状态值、写状态值和读溢出状态值,其中空闲状态值表示线程可以写临界区也可以读临界区;读状态值表示线程可以读临界区;写状态值表示不允许线程读或者写所述临界区;读溢出状态值表示读临界区的线程的数量超出了预定的上限范围,禁止其他线程读所述临界区;为便于理解,以32位CPU举例,创建所述线程互斥锁变量lock的4个状态值为所述空闲状态值为0x40000000 ;所述读状态值为大于O且不等于写状态值的值,取值范围在I至0x3fffffff之间;所述写状态值为0,即0x00000000,当所述线程互斥锁变量的值为写状态值时,不允许线程读或者写所述临界区;所述读溢出状态值指所述符号位为I的值;所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块;为便于理解,以32位CPU举例初始化所述线程互斥锁变量lock为空闲状态值0x40000000 ;所述获取模块,与所述初始模块和判断模块相连,用于接收所述初始模块发送的获取指令,并获取线程的访问方式,同时发送判断指令到所述判断模块;所述访问方式包括读访问方式和写访问方式;所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区;所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述修改指令修改所述线程互斥锁变量中的当前值;为便于理解,继续举例假设所述线程互斥锁变量lock的当前值为0x3ffffffc,所述获取模块获取到的线程的访问方式为读访问方式;所述判断模块判断所述线程互斥锁变量lock的当前值0x3ffffffc是否等于所述读状态值,由于当前值0x3ffffffc是在读状态值的取值范围内,所以判断结果为是,则所述判断模块发送访问指令到所述访问模块,并发送修改指令到所述修改模块;所述访问模块接收到所述访问指令,允许所述线程以所述读访问方式访问临界区;所述修改模块根据所述读访问方式修改所述线程互斥锁变量中的值。对上述方案进一步优化在于,所述状态值包括空闲状态值、读状态值、写状态值;所述访问方式包括读访问方式和写访问方式,如图6所示为本发明一种线程访问临界区系统的第二优选实施例结构示意图;所述获取模块包括第一获取单元;所述判断模块包括第一判断单元;所述访问模块包括第一访问单元;所述修改模块包括第一修改单元;所述初始模块,还用于发送第一获取指令到所述第一获取单元;所述第一获取单元,与所述第一判断单元和初始模块相连,用于接收所述初始模块发送的第一获取指令,根据所述第一获取指令获取线程的读访问方式,并发送第一判断指令到所述第一判断单元;所述第一判断单元,与所述第一获取单元、第一创建模块、第一访问单元和第一修改单元相连,用于接收所述第一获取单元发送的第一判断指令,并判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则发送读访问指令到所述第一访问单元,同时发送 第一修改指令到所述第一修改单元;所述第一访问单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的读访问指令,并允许所述线程读所述临界区;所述第一修改单元,与所述第一判断单元和第一创建模块相连,用于接收所述第一判断单元发送的第一修改指令,并根据所述第一修改指令将所述线程互斥锁变量中的当前值减I;所述“将所述线程互斥锁变量中的当前值减I”为原子递减;为便于理解,继续举例原子递减为lock-;避免所述线程互斥锁变量在递减时被系统中断;假设所述线程互斥锁变量lock的当前值为0x40000000,所述第一获取单元获取到的线程的访问方式为读访问方式;所述第一判断单元判断所述线程互斥锁变量lock的当前值0x40000000是否等于所述空闲状态值,由于当前值0x40000000等于所述空闲状态值0x40000000,所以判断结果为是,则所述第一判断单元发送访问指令到所述第一访问单元,同时发送第一修改指令到所述第一修改单元;所述第一访问单元接收到所述第一判断单元发送的访问指令后,允许所述线程以所述读访问方式访问临界区;所述第一修改单元接收到所述第一判断单元发送的第一修改指令后,根据所述第一修改指令将所述线程互斥锁变量lock中的当前值0x40000000减1,这时,所述线程互斥锁变量lock中的当前值为0x3fffffff。对上述方案进一步优化在于,所述修改模块还包括第二修改单元,如图7所示为本发明一种线程访问临界区系统的第三优选实施例结构示意图;所述第一访问单元,还用于当所述线程读所述临界区结束后发送第二修改指令到所述第二修改单元;所述第二修改单元,与所述第一创建模块和第一访问单元相连,用于接收所述第一访问单元发送的第二修改指令,并根据所述第二修改指令将所述线程互斥锁变量中的当前值加I;所述“将所述线程互斥锁变量中的当前值加I”为原子递增;为便于理解,继续举例原子递增为lock++ ;避免所述线程互斥锁变量在递增时被系统中断;所述第一访问单元判断所述线程读所述临界区结束时,发送第二修改指令到所述第二修改单元;所述第二修改单元接收到所述第一访问单元发送的第二修改指令后,将所述线程互斥锁变量lock中的当前值0x3fffffff加I,这时,所述线程互斥锁变量lock中的当前值为0x40000000,即所述线程互斥锁变量中的当前值又变为空闲状态值,这时候允许线程读临界区或者写临界区;对上述方案进一步优化在于,所述获取模块还包括第二获取单元;所述判断模块还包括第二判断单元;所述访问模块还包括第二访问单元;所述修改模块还包括第三修改单元,如图8所示为本发明一种线程访问临界区系统的第四优选实施例结构示意图;所述第二获取单元,与所述第二判断单元和初始模块相连,用于获取线程的写访问方式,并发送第二判断指令到所述第二判断单元;所述第二判断单元,与所述第二获取单元、第一创建模块、第二访问单元和第三修改单元相连,用于接收所述第二获取单元发送的第二判断指令,并判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则发送写指令到所述第二访问单元,同时发送第三修改指令到所述第三修改单元;所述第二访问单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的写指令,并允许所述线程写所述临界区;所述第三修改单元,与所述第二判断单元和第一创建模块相连,用于接收所述第二判断单元发送的第三修改指令,并根据所述第三修改指令修改所述线程互斥锁变量中的当前值为写状态值。继续举例,即修改所述线程互斥锁变量中的当前值为所述写状态值0x000000000,这时禁止其他线程读或者写所述临界区。对上述方案进一步优化在于,所述修改模块还包括第四修改单元,如图9所示为本发明一种线程访问临界区系统的第五优选实施例结构示意图;所述第二访问单元,还用于当所述线程写所述临界区结束后发送第四修改指令到所述第四修改单元;所述第四修改单元,与所述第一创建模块和第二访问单元相连,用于接收所述第二访问单元发送的第四修改指令,并根据所述第四修改指令修改所述线程互斥锁变量中的当前值为空闲状态值。继续举例,即修改所述线程互斥锁变量中的当前值为0x400000000,这时其他线程可以读或者写临界区。对上述方案进一步优化在于,所述系统还包括禁止模块,所述禁止模块包括第一禁止单元和第二禁止单元,如图10所示为本发明一种线程访问临界区系统的第六优选实施例结构示意图;
所述第一判断单元还用于判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若否则发送第一禁止指令到所述第一禁止单元;所述第一禁止单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的第一禁止指令,并根据所述第一禁止指令禁止所述线程读所述临界区;禁止线程读临界区时包括两种情况3)所述线程互斥锁变量中的当前值等于读溢出状态值,即所述线程互斥锁变量的符号位为1,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区;4)所述线程互斥锁变量的当前值等于写状态值,表示有一个线程在写所述临界区,这时禁止其他线程读所述临界区;
所述第二判断单元还用于判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若否则发送第二禁止指令到所述第二禁止单元;所述第二禁止单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的第二禁止指令,并根据所述第二禁止指令禁止所述线程写所述临界区;此时,禁止所述线程写所述临界区包括三种情况4)所述线程互斥锁变量中的当前值等于所述写状态值,表示有一个线程在写所述临界区;
5)所述线程互斥锁变量中的当前值等于所述读状态值,表示有一个或多个线程在读所述临界区;所述线程互斥锁变量中的值等于所述读溢出值,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区,同理,也禁止其他线程写所述临界区。有益效果本发明通过第一创建模块创建线程互斥锁变量;第二创建模块创建所述线程互斥锁变量的状态值;初始模块初始化所述线程互斥锁变量为状态值;获取模块获取线程的访问方式;判断模块判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;访问模块接收到所述判断模块发送的访问指令后,允许所述线程以所述访问方式访问临界区;修改模块接收到所述判断模块发送的修改指令后,根据所述访问方式修改所述线程互斥锁变量中的当前值。确保了线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了 CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。进一步将所述获取模块、判断模块、访问模块和修改模块进行细化,由第一获取单元、第一判断单元、第一访问单元、第一修改单元和第二修改单元实现读临界区的功能;由第二获取单元、第二判断单元、第二访问单元、第三修改单元和第四修改单元实现写临界区的功能。进一步增加禁止模块,当判断模块判断所述线程互斥锁变量中的当前值不等于所述状态值时,所述禁止模块禁止线程访问临界区。特别地,通过原子递增或者递减,更加准确和有效的访问临界区。本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种线程访问临界区的方法,其特征在于,所述方法包括步骤 创建线程互斥锁变量; 创建所述线程互斥锁变量的状态值; 初始化所述线程互斥锁变量为状态值; 获取线程的访问方式; 判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。
2.根据权利要求I所述的线程访问临界区的方法,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值; 所述访问方式包括读访问方式和写访问方式; 所述步骤“获取线程的访问方式”为获取线程的读访问方式; 所述步骤“判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值”具体为 判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则允许所述线程读所述临界区; 根据所述读访问方式将所述线程互斥锁变量中的当前值减I。
3.根据权利要求2所述的线程访问临界区的方法,其特征在于,所述步骤“根据所述读访问方式将所述线程互斥锁变量中的当前值减I”之后还包括 当所述线程读所述临界区结束后,将所述线程互斥锁变量中的当前值加I。
4.根据权利要求I所述的线程访问临界区的方法,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值; 所述访问方式包括读访问方式和写访问方式; 所述步骤“获取线程的访问方式”为获取线程的写访问方式; 所述步骤“判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值”具体为 判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则允许所述线程写所述临界区; 根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值。
5.根据权利要求4所述的线程访问临界区的方法,其特征在于,所述步骤“根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值”之后还包括步骤 当所述线程写所述临界区结束后,修改所述线程互斥锁变量中的当前值为空闲状态值。
6.一种线程访问临界区的系统,其特征在于,所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块; 所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量; 所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值; 所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块; 所述获取模块,与所述初始模块和判断模块相连,用于接收所述初始模块发送的获取 指令,并获取线程的访问方式,同时发送判断指令到所述判断模块; 所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块; 所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区; 所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述修改指令修改所述线程互斥锁变量中的当前值。
7.根据权利要求6所述线程访问临界区的系统,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值;所述访问方式包括读访问方式和写访问方式; 所述获取模块包括第一获取单元;所述判断模块包括第一判断单元;所述访问模块包括第一访问单元;所述修改模块包括第一修改单元; 所述初始模块,还用于发送第一获取指令到所述第一获取单元; 所述第一获取单元,与所述第一判断单元和初始模块相连,用于接收所述初始模块发送的第一获取指令,根据所述第一获取指令获取线程的读访问方式,并发送第一判断指令到所述第一判断单元; 所述第一判断单元,与所述第一获取单元、第一创建模块、第一访问单元和第一修改单元相连,用于接收所述第一获取单元发送的第一判断指令,并判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则发送读访问指令到所述第一访问单元,同时发送第一修改指令到所述第一修改单元; 所述第一访问单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的读访问指令,并允许所述线程读所述临界区; 所述第一修改单元,与所述第一判断单元和第一创建模块相连,用于接收所述第一判断单元发送的第一修改指令,并根据所述第一修改指令将所述线程互斥锁变量中的当前值减I。
8.根据权利要求7所述线程访问临界区的系统,其特征在于,所述修改模块还包括第二修改单元; 所述第一访问单元,还用于当所述线程读所述临界区结束后发送第二修改指令到所述第二修改单元; 所述第二修改单元,与所述第一创建模块和第一访问单元相连,用于接收所述第一访问单元发送的第二修改指令,并根据所述第二修改指令将所述线程互斥锁变量中的当前值加I。
9.根据权利要求8所述线程访问临界区的系统,其特征在于,所述获取模块还包括第二获取单元;所述判断模块还包括第二判断单元;所述访问模块还包括第二访问单元;所述修改模块还包括第三修改单元;所述第二获取单元,与所述第二判断单元和初始模块相连,用于获取线程的写访问方式,并发送第二判断指令到所述第二判断单元; 所述第二判断单元,与所述第二获取单元、第一创建模块、第二访问单元和第三修改单元相连,用于接收所述第二获取单元发送的第二判断指令,并判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则发送写指令到所述第二访问单元,同时发送第三修改指令到所述第三修改单元; 所述第二访问单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的写指令,并允许所述线程写所述临界区; 所述第三修改单元,与所述第二判断单元和第一创建模块相连,用于接收所述第二判断单元发送的第三修改指令,并根据所述第三修改指令修改所述线程互斥锁变量中的当前值为写状态值。
10.根据权利要求9所述线程访问临界区的系统,其特征在于,所述修改模块还包括第四修改单元; 所述第二访问单元,还用于当所述线程写所述临界区结束后发送第四修改指令到所述第四修改单元; 所述第四修改单元,与所述第一创建模块和第二访问单元相连,用于接收所述第二访问单元发送的第四修改指令,并根据所述第四修改指令修改所述线程互斥锁变量中的当前值为空闲状态值。
11.一种线程访问临界区的终端设备,其特征在于,所述的终端设备包括权利要求6-10任一种所述的线程访问临界区的系统。
全文摘要
本发明公开一种线程访问临界区的方法、系统和终端设备。本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。通过原子递增或者递减,更加准确和有效的访问临界区。
文档编号G06F9/46GK102662747SQ20121012118
公开日2012年9月12日 申请日期2012年4月23日 优先权日2012年4月23日
发明者刘骁 申请人:深圳市融创天下科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1