CN102662747A - 一种线程访问临界区的方法、系统和终端设备 - Google Patents

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

Info

Publication number
CN102662747A
CN102662747A CN2012101211833A CN201210121183A CN102662747A CN 102662747 A CN102662747 A CN 102662747A CN 2012101211833 A CN2012101211833 A CN 2012101211833A CN 201210121183 A CN201210121183 A CN 201210121183A CN 102662747 A CN102662747 A CN 102662747A
Authority
CN
China
Prior art keywords
module
thread
critical section
exclusive lock
line procedure
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.)
Pending
Application number
CN2012101211833A
Other languages
English (en)
Inventor
刘骁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
World (Shanghai) Technology Development Co., Ltd.
Original Assignee
Shenzhen Temobi Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Temobi Science and Technology Co Ltd filed Critical Shenzhen Temobi Science and Technology Co Ltd
Priority to CN2012101211833A priority Critical patent/CN102662747A/zh
Publication of CN102662747A publication Critical patent/CN102662747A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Control Of Vending Devices And Auxiliary Devices For Vending Devices (AREA)

Abstract

本发明公开一种线程访问临界区的方法、系统和终端设备。本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。通过原子递增或者递减,更加准确和有效的访问临界区。

Description

一种线程访问临界区的方法、系统和终端设备
技术领域
本发明涉及多线程调用领域,尤其涉及一种线程访问临界区的方法、系统和终端设备。
背景技术
现有技术中,不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。
进程进入临界区的调度原则是:
1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
现有技术存在的问题:
多个进程互斥的访问临界区时,访问效率低,等待时间长,CPU消耗大。
发明内容
本发明实施例的目的在于提出一种线程访问临界区的方法,旨在解决现有技术多个进程互斥的访问临界区时,访问效率低,等待时间长,CPU消耗大的技术问题。
本发明实施例是这样实现的,一种线程访问临界区的方法,所述方法包括步骤:
创建线程互斥锁变量;
创建所述线程互斥锁变量的状态值;
初始化所述线程互斥锁变量为状态值;
获取线程的访问方式;
判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。
本发明实施例的另一目的在于提出一种线程访问临界区的系统,所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块;
所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量;
所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值;
所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块;
所述获取模块,与所述判断模块相连,用于接收所述初始模块发送的获取指令,并获取线程的访问方式,同时发送判断指令到所述判断模块;
所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;
所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区;
所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述访问方式修改所述线程互斥锁变量中的当前值。
本发明实施例的另一目的在于提出一种线程访问临界区的终端设备。
本发明的有益效果:
本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。
附图说明
图1是本发明一种线程访问临界区方法的第一优选实施例流程图;
图2是本发明32位线程互斥锁变量的结构示意图;
图3是本发明一种线程访问临界区方法的第二优选实施例流程图;
图4是本发明一种线程访问临界区方法的第三优选实施例流程图;
图5是本发明一种线程访问临界区系统的第一优选实施例结构示意图;
图6是本发明一种线程访问临界区系统的第二优选实施例结构示意图;
图7是本发明一种线程访问临界区系统的第三优选实施例结构示意图;
图8是本发明一种线程访问临界区系统的第四优选实施例结构示意图;
图9是本发明一种线程访问临界区系统的第五优选实施例结构示意图;
图10是本发明一种线程访问临界区系统的第六优选实施例结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。
实施例一
图1是本发明一种线程访问临界区方法的第一优选实施例流程图。所述的方法包括以下步骤:
S101,创建线程互斥锁变量;
所述线程互斥锁变量的位数为CPU一次能处理的最大位数;
所述线程互斥锁变量为有符号整数的线程互斥锁变量;
所述线程互斥锁变量的最高位为符号位,当所述符号位为0时,表示所述线程互斥锁变量中的值为正整数;当所述符号位为1时,表示所述线程互斥锁变量中的值为负整数;
所述线程互斥锁变量的最高位的下一位若为1则表示线程互斥锁空闲,允许线程访问临界区;若为0则表示已经有线程访问临界区;
所述线程互斥锁变量的其他位为读锁计数器位,用于存储当前读临界区的线程的数量;
所述线程互斥锁变量的值以补码表示;
为便于理解,举例说明,如图2所示为本发明32位线程互斥锁变量lock的结构示意图,其中S200为第0位,S201为第29位,S202为第30位,S203为第31位,其中最高位为S203,S203为符号位,最高位的下一位为S202,其余位S200-S201为读锁计数器;
当有一个线程访问临界区时,所述线程互斥锁变量的值为:0x3fffffff;
当有两个线程访问临界区时,所述线程互斥锁变量的值为:0x3ffffffe,以此类推;
S102,创建所述线程互斥锁变量的状态值;
所述线程互斥锁变量还包括4个状态值,分别是:空闲状态值、读状态值、写状态值和读溢出状态值,其中空闲状态值表示线程可以写临界区也可以读临界区;读状态值表示线程可以读临界区;写状态值表示不允许线程读或者写所述临界区;读溢出状态值表示读临界区的线程的数量超出了预定的上限范围,禁止其他线程读所述临界区;
为便于理解,以32位CPU举例,创建所述线程互斥锁变量lock的4个状态值为:
所述空闲状态值为0x40000000;
所述读状态值为大于0且不等于写状态值的值,取值范围在1至0x3fffffff之间;
所述写状态值为0,即0x00000000,当所述线程互斥锁变量的值为写状态值时,不允许线程读或者写所述临界区;
所述读溢出状态值指所述符号位为1的值;
S103,初始化所述线程互斥锁变量为状态值;
为便于理解,以32位CPU举例:
初始化所述线程互斥锁变量lock为空闲状态值0x40000000;
S104,获取线程的访问方式;
所述访问方式包括读访问方式和写访问方式;
S105,判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。
为便于理解,继续举例:
假设所述线程互斥锁变量lock的当前值为0x3ffffffc,获取到的线程的访问方式为读访问方式;
判断所述线程互斥锁变量lock的当前值0x3ffffffc是否等于所述读状态值,由于当前值0x3ffffffc是在读状态值的取值范围内,所以判断结果为是,则允许所述线程以所述读访问方式访问临界区,并根据所述读访问方式修改所述线程互斥锁变量中的值。
实施例二
图3是本发明一种线程访问临界区方法的第二优选实施例流程图。所述的方法包括以下步骤:
S301,创建线程互斥锁变量;
所述线程互斥锁变量的位数为CPU一次能处理的最大位数;
S302,创建所述线程互斥锁变量的状态值;
S303,初始化所述线程互斥锁变量为状态值;
S304,获取线程的读访问方式;
S305,判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,如是则进入步骤S306;若否则进入步骤S308;
S306,允许所述线程读所述临界区,并根据所述读访问方式将所述线程互斥锁变量中的当前值减1;
为便于理解,继续举例:
假设所述线程互斥锁变量lock的当前值为0x40000000,获取到的线程的访问方式为读访问方式;
判断所述线程互斥锁变量lock的当前值0x40000000是否等于所述空闲状态值,由于当前值0x40000000等于所述空闲状态值0x40000000,所以判断结果为是,则允许所述线程以所述读访问方式访问临界区,并根据所述读访问方式将所述线程互斥锁变量lock中的当前值0x40000000减1,这时,所述线程互斥锁变量lock中的当前值为0x3fffffff;
S307,当所述线程读所述临界区结束后,将所述线程互斥锁变量中的当前值加1;
为便于理解,继续举例:
当所述线程读所述临界区结束后,将所述线程互斥锁变量lock中的当前值0x3fffffff加1,这时,所述线程互斥锁变量lock中的当前值为0x40000000,即所述线程互斥锁变量中的当前值又变为空闲状态值,这时候允许线程读临界区或者写临界区;
S308,禁止所述线程读所述临界区。
禁止线程读临界区时包括两种情况:
1)所述线程互斥锁变量中的当前值等于读溢出状态值,即所述线程互斥锁变量的符号位为1,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区;
2)所述线程互斥锁变量的当前值等于写状态值,表示有一个线程在写所述临界区,这时禁止其他线程读所述临界区。
对上述方案进一步优化在于,所述“将所述线程互斥锁变量中的当前值减1”为原子递减;
所述“将所述线程互斥锁变量中的当前值加1”为原子递增;
为便于理解,继续举例:
原子递减为lock--;避免所述线程互斥锁变量在递减时被系统中断;
原子递增为lock++;避免所述线程互斥锁变量在递增时被系统中断。
实施例三
图4是本发明一种线程访问临界区方法的第三优选实施例流程图。所述的方法包括以下步骤:
S401,创建线程互斥锁变量;
所述线程互斥锁变量的位数为CPU一次能处理的最大位数;
S402,创建所述线程互斥锁变量的状态值;
S403,初始化所述线程互斥锁变量为状态值;
S404,获取线程的写访问方式;
S405,判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则进入步骤S406;若否则进入步骤S408;
只有当所述线程互斥锁变量中的当前值等于空闲状态值时才允许线程写临界区;
S406,允许所述线程写所述临界区,并根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值;
继续举例,即修改所述线程互斥锁变量中的当前值为所述写状态值0x000000000,这时禁止其他线程读或者写所述临界区;
S407,当所述线程写所述临界区结束后,修改所述线程互斥锁变量中的当前值为空闲状态值。
继续举例,即修改所述线程互斥锁变量中的当前值为0x400000000,这时其他线程可以读或者写临界区;
S408,禁止所述线程写所述临界区。
此时,禁止所述线程写所述临界区包括三种情况:
1)所述线程互斥锁变量中的当前值等于所述写状态值,表示有一个线程在写所述临界区;
2)所述线程互斥锁变量中的当前值等于所述读状态值,表示有一个或多个线程在读所述临界区;
3)所述线程互斥锁变量中的值等于所述读溢出值,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区,同理,也禁止其他线程写所述临界区。
有益效果
本发明通过创建线程互斥锁变量和创建所述线程互斥锁变量的状态值;初始化所述线程互斥锁变量为状态值;获取线程的访问方式;判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值;若否则禁止所述线程以所述访问方式访问临界区。确保线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。通过原子递增或者递减,更加准确和有效的访问临界区。
实施例四
图5是本发明一种线程访问临界区系统的第一优选实施例结构示意图。所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块;
所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量;
所述线程互斥锁变量的位数为CPU一次能处理的最大位数;
所述线程互斥锁变量为有符号整数的线程互斥锁变量;
所述线程互斥锁变量的最高位为符号位,当所述符号位为0时,表示所述线程互斥锁变量中的值为正整数;当所述符号位为1时,表示所述线程互斥锁变量中的值为负整数;
所述线程互斥锁变量的最高位的下一位若为1则表示线程互斥锁空闲,允许线程访问临界区;若为0则表示已经有线程访问临界区;
所述线程互斥锁变量的其他位为读锁计数器位,用于存储当前读临界区的线程的数量;
所述线程互斥锁变量的值以补码表示;
为便于理解,举例说明,如图2所示为本发明32位线程互斥锁变量lock的结构示意图,其中S200为第0位,S201为第29位,S202为第30位,S203为第31位,其中最高位为S203,S203为符号位,最高位的下一位为S202,其余位S200-S201为读锁计数器;
当有一个线程访问临界区时,所述线程互斥锁变量的值为:0x3fffffff;
当有两个线程访问临界区时,所述线程互斥锁变量的值为:0x3ffffffe,以此类推;
所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值;
所述线程互斥锁变量还包括4个状态值,分别是:空闲状态值、读状态值、写状态值和读溢出状态值,其中空闲状态值表示线程可以写临界区也可以读临界区;读状态值表示线程可以读临界区;写状态值表示不允许线程读或者写所述临界区;读溢出状态值表示读临界区的线程的数量超出了预定的上限范围,禁止其他线程读所述临界区;
为便于理解,以32位CPU举例,创建所述线程互斥锁变量lock的4个状态值为:
所述空闲状态值为0x40000000;
所述读状态值为大于0且不等于写状态值的值,取值范围在1至0x3fffffff之间;
所述写状态值为0,即0x00000000,当所述线程互斥锁变量的值为写状态值时,不允许线程读或者写所述临界区;
所述读溢出状态值指所述符号位为1的值;
所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块;
为便于理解,以32位CPU举例:
初始化所述线程互斥锁变量lock为空闲状态值0x40000000;
所述获取模块,与所述初始模块和判断模块相连,用于接收所述初始模块发送的获取指令,并获取线程的访问方式,同时发送判断指令到所述判断模块;
所述访问方式包括读访问方式和写访问方式;
所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;
所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区;
所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述修改指令修改所述线程互斥锁变量中的当前值;
为便于理解,继续举例:
假设所述线程互斥锁变量lock的当前值为0x3ffffffc,所述获取模块获取到的线程的访问方式为读访问方式;
所述判断模块判断所述线程互斥锁变量lock的当前值0x3ffffffc是否等于所述读状态值,由于当前值0x3ffffffc是在读状态值的取值范围内,所以判断结果为是,则所述判断模块发送访问指令到所述访问模块,并发送修改指令到所述修改模块;
所述访问模块接收到所述访问指令,允许所述线程以所述读访问方式访问临界区;
所述修改模块根据所述读访问方式修改所述线程互斥锁变量中的值。
对上述方案进一步优化在于,所述状态值包括空闲状态值、读状态值、写状态值;所述访问方式包括读访问方式和写访问方式,如图6所示为本发明一种线程访问临界区系统的第二优选实施例结构示意图;
所述获取模块包括第一获取单元;所述判断模块包括第一判断单元;所述访问模块包括第一访问单元;所述修改模块包括第一修改单元;
所述初始模块,还用于发送第一获取指令到所述第一获取单元;
所述第一获取单元,与所述第一判断单元和初始模块相连,用于接收所述初始模块发送的第一获取指令,根据所述第一获取指令获取线程的读访问方式,并发送第一判断指令到所述第一判断单元;
所述第一判断单元,与所述第一获取单元、第一创建模块、第一访问单元和第一修改单元相连,用于接收所述第一获取单元发送的第一判断指令,并判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则发送读访问指令到所述第一访问单元,同时发送第一修改指令到所述第一修改单元;
所述第一访问单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的读访问指令,并允许所述线程读所述临界区;
所述第一修改单元,与所述第一判断单元和第一创建模块相连,用于接收所述第一判断单元发送的第一修改指令,并根据所述第一修改指令将所述线程互斥锁变量中的当前值减1;
所述“将所述线程互斥锁变量中的当前值减1”为原子递减;
为便于理解,继续举例:
原子递减为lock--;避免所述线程互斥锁变量在递减时被系统中断;
假设所述线程互斥锁变量lock的当前值为0x40000000,所述第一获取单元获取到的线程的访问方式为读访问方式;
所述第一判断单元判断所述线程互斥锁变量lock的当前值0x40000000是否等于所述空闲状态值,由于当前值0x40000000等于所述空闲状态值0x40000000,所以判断结果为是,则所述第一判断单元发送访问指令到所述第一访问单元,同时发送第一修改指令到所述第一修改单元;
所述第一访问单元接收到所述第一判断单元发送的访问指令后,允许所述线程以所述读访问方式访问临界区;
所述第一修改单元接收到所述第一判断单元发送的第一修改指令后,根据所述第一修改指令将所述线程互斥锁变量lock中的当前值0x40000000减1,这时,所述线程互斥锁变量lock中的当前值为0x3fffffff。
对上述方案进一步优化在于,所述修改模块还包括第二修改单元,如图7所示为本发明一种线程访问临界区系统的第三优选实施例结构示意图;
所述第一访问单元,还用于当所述线程读所述临界区结束后发送第二修改指令到所述第二修改单元;
所述第二修改单元,与所述第一创建模块和第一访问单元相连,用于接收所述第一访问单元发送的第二修改指令,并根据所述第二修改指令将所述线程互斥锁变量中的当前值加1;
所述“将所述线程互斥锁变量中的当前值加1”为原子递增;
为便于理解,继续举例:
原子递增为lock++;避免所述线程互斥锁变量在递增时被系统中断;
所述第一访问单元判断所述线程读所述临界区结束时,发送第二修改指令到所述第二修改单元;
所述第二修改单元接收到所述第一访问单元发送的第二修改指令后,将所述线程互斥锁变量lock中的当前值0x3fffffff加1,这时,所述线程互斥锁变量lock中的当前值为0x40000000,即所述线程互斥锁变量中的当前值又变为空闲状态值,这时候允许线程读临界区或者写临界区;
对上述方案进一步优化在于,所述获取模块还包括第二获取单元;所述判断模块还包括第二判断单元;所述访问模块还包括第二访问单元;所述修改模块还包括第三修改单元,如图8所示为本发明一种线程访问临界区系统的第四优选实施例结构示意图;
所述第二获取单元,与所述第二判断单元和初始模块相连,用于获取线程的写访问方式,并发送第二判断指令到所述第二判断单元;
所述第二判断单元,与所述第二获取单元、第一创建模块、第二访问单元和第三修改单元相连,用于接收所述第二获取单元发送的第二判断指令,并判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则发送写指令到所述第二访问单元,同时发送第三修改指令到所述第三修改单元;
所述第二访问单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的写指令,并允许所述线程写所述临界区;
所述第三修改单元,与所述第二判断单元和第一创建模块相连,用于接收所述第二判断单元发送的第三修改指令,并根据所述第三修改指令修改所述线程互斥锁变量中的当前值为写状态值。
继续举例,即修改所述线程互斥锁变量中的当前值为所述写状态值0x000000000,这时禁止其他线程读或者写所述临界区。
对上述方案进一步优化在于,所述修改模块还包括第四修改单元,如图9所示为本发明一种线程访问临界区系统的第五优选实施例结构示意图;
所述第二访问单元,还用于当所述线程写所述临界区结束后发送第四修改指令到所述第四修改单元;
所述第四修改单元,与所述第一创建模块和第二访问单元相连,用于接收所述第二访问单元发送的第四修改指令,并根据所述第四修改指令修改所述线程互斥锁变量中的当前值为空闲状态值。
继续举例,即修改所述线程互斥锁变量中的当前值为0x400000000,这时其他线程可以读或者写临界区。
对上述方案进一步优化在于,所述系统还包括禁止模块,所述禁止模块包括第一禁止单元和第二禁止单元,如图10所示为本发明一种线程访问临界区系统的第六优选实施例结构示意图;
所述第一判断单元还用于判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若否则发送第一禁止指令到所述第一禁止单元;
所述第一禁止单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的第一禁止指令,并根据所述第一禁止指令禁止所述线程读所述临界区;
禁止线程读临界区时包括两种情况:
3)所述线程互斥锁变量中的当前值等于读溢出状态值,即所述线程互斥锁变量的符号位为1,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区;
4)所述线程互斥锁变量的当前值等于写状态值,表示有一个线程在写所述临界区,这时禁止其他线程读所述临界区;
所述第二判断单元还用于判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若否则发送第二禁止指令到所述第二禁止单元;
所述第二禁止单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的第二禁止指令,并根据所述第二禁止指令禁止所述线程写所述临界区;
此时,禁止所述线程写所述临界区包括三种情况:
4)所述线程互斥锁变量中的当前值等于所述写状态值,表示有一个线程在写所述临界区;
5)所述线程互斥锁变量中的当前值等于所述读状态值,表示有一个或多个线程在读所述临界区;
所述线程互斥锁变量中的值等于所述读溢出值,表示读临界区的线程的数量超出了预定的上限范围,则禁止其他线程读所述临界区,同理,也禁止其他线程写所述临界区。
有益效果
本发明通过第一创建模块创建线程互斥锁变量;第二创建模块创建所述线程互斥锁变量的状态值;初始模块初始化所述线程互斥锁变量为状态值;获取模块获取线程的访问方式;判断模块判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;访问模块接收到所述判断模块发送的访问指令后,允许所述线程以所述访问方式访问临界区;修改模块接收到所述判断模块发送的修改指令后,根据所述访问方式修改所述线程互斥锁变量中的当前值。确保了线程访问临界区前,能够快速确定所述临界区是否可用,如果所述临界区不可用,线程可主动放弃CPU时间片,避免线程访问笨重、耗时的系统锁,提高了临界区的访问效率以及多线互斥访问的效率,减少了CPU消耗,同时提高了软件产品的市场竞争力。尤其是线程访问非常小的临界区时,进一步提高了线程的访问效率。进一步将所述获取模块、判断模块、访问模块和修改模块进行细化,由第一获取单元、第一判断单元、第一访问单元、第一修改单元和第二修改单元实现读临界区的功能;由第二获取单元、第二判断单元、第二访问单元、第三修改单元和第四修改单元实现写临界区的功能。进一步增加禁止模块,当判断模块判断所述线程互斥锁变量中的当前值不等于所述状态值时,所述禁止模块禁止线程访问临界区。特别地,通过原子递增或者递减,更加准确和有效的访问临界区。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种线程访问临界区的方法,其特征在于,所述方法包括步骤:
创建线程互斥锁变量;
创建所述线程互斥锁变量的状态值;
初始化所述线程互斥锁变量为状态值;
获取线程的访问方式;
判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值。
2.根据权利要求1所述的线程访问临界区的方法,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值;
所述访问方式包括读访问方式和写访问方式;
所述步骤“获取线程的访问方式”为获取线程的读访问方式;
所述步骤“判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值”具体为:
判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则允许所述线程读所述临界区;
根据所述读访问方式将所述线程互斥锁变量中的当前值减1。
3.根据权利要求2所述的线程访问临界区的方法,其特征在于,所述步骤“根据所述读访问方式将所述线程互斥锁变量中的当前值减1”之后还包括:
当所述线程读所述临界区结束后,将所述线程互斥锁变量中的当前值加1。
4.根据权利要求1所述的线程访问临界区的方法,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值;
所述访问方式包括读访问方式和写访问方式;
所述步骤“获取线程的访问方式”为获取线程的写访问方式;
所述步骤“判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则允许所述线程以所述访问方式访问临界区,并根据所述访问方式修改所述线程互斥锁变量中的当前值”具体为:
判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则允许所述线程写所述临界区;
根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值。
5.根据权利要求4所述的线程访问临界区的方法,其特征在于,所述步骤“根据所述写访问方式修改所述线程互斥锁变量中的当前值为写状态值”之后还包括步骤:
当所述线程写所述临界区结束后,修改所述线程互斥锁变量中的当前值为空闲状态值。
6.一种线程访问临界区的系统,其特征在于,所述系统包括第一创建模块、第二创建模块、初始模块、获取模块、判断模块、访问模块和修改模块;
所述第一创建模块,与所述第二创建模块、初始模块、判断模块和修改模块相连,用于创建线程互斥锁变量;
所述第二创建模块,与所述第一创建模块和初始模块相连,用于创建所述线程互斥锁变量的状态值;
所述初始模块,与所述第一创建模块、第二创建模块和获取模块相连,用于初始化所述线程互斥锁变量为状态值,并发送获取指令到所述获取模块;
所述获取模块,与所述初始模块和判断模块相连,用于接收所述初始模块发送的获取指令,并获取线程的访问方式,同时发送判断指令到所述判断模块;
所述判断模块,与所述获取模块、第一创建模块、访问模块和修改模块相连,用于接收所述获取模块发送的判断指令,并判断所述线程互斥锁变量中的当前值是否等于所述状态值,若是则发送访问指令到所述访问模块,并发送修改指令到所述修改模块;
所述访问模块,与所述判断模块相连,用于接收所述判断模块发送的访问指令,并允许所述线程以所述访问方式访问临界区;
所述修改模块,与所述判断模块和第一创建模块相连,用于接收所述判断模块发送的修改指令,并根据所述修改指令修改所述线程互斥锁变量中的当前值。
7.根据权利要求6所述线程访问临界区的系统,其特征在于,所述状态值包括空闲状态值、读状态值、写状态值;所述访问方式包括读访问方式和写访问方式;
所述获取模块包括第一获取单元;所述判断模块包括第一判断单元;所述访问模块包括第一访问单元;所述修改模块包括第一修改单元;
所述初始模块,还用于发送第一获取指令到所述第一获取单元;
所述第一获取单元,与所述第一判断单元和初始模块相连,用于接收所述初始模块发送的第一获取指令,根据所述第一获取指令获取线程的读访问方式,并发送第一判断指令到所述第一判断单元;
所述第一判断单元,与所述第一获取单元、第一创建模块、第一访问单元和第一修改单元相连,用于接收所述第一获取单元发送的第一判断指令,并判断所述线程互斥锁变量中的当前值是否等于读状态值或者空闲状态值,若是则发送读访问指令到所述第一访问单元,同时发送第一修改指令到所述第一修改单元;
所述第一访问单元,与所述第一判断单元相连,用于接收所述第一判断单元发送的读访问指令,并允许所述线程读所述临界区;
所述第一修改单元,与所述第一判断单元和第一创建模块相连,用于接收所述第一判断单元发送的第一修改指令,并根据所述第一修改指令将所述线程互斥锁变量中的当前值减1。
8.根据权利要求7所述线程访问临界区的系统,其特征在于,所述修改模块还包括第二修改单元;
所述第一访问单元,还用于当所述线程读所述临界区结束后发送第二修改指令到所述第二修改单元;
所述第二修改单元,与所述第一创建模块和第一访问单元相连,用于接收所述第一访问单元发送的第二修改指令,并根据所述第二修改指令将所述线程互斥锁变量中的当前值加1。
9.根据权利要求8所述线程访问临界区的系统,其特征在于,所述获取模块还包括第二获取单元;所述判断模块还包括第二判断单元;所述访问模块还包括第二访问单元;所述修改模块还包括第三修改单元;
所述第二获取单元,与所述第二判断单元和初始模块相连,用于获取线程的写访问方式,并发送第二判断指令到所述第二判断单元;
所述第二判断单元,与所述第二获取单元、第一创建模块、第二访问单元和第三修改单元相连,用于接收所述第二获取单元发送的第二判断指令,并判断所述线程互斥锁变量中的当前值是否等于空闲状态值,若是则发送写指令到所述第二访问单元,同时发送第三修改指令到所述第三修改单元;
所述第二访问单元,与所述第二判断单元相连,用于接收所述第二判断单元发送的写指令,并允许所述线程写所述临界区;
所述第三修改单元,与所述第二判断单元和第一创建模块相连,用于接收所述第二判断单元发送的第三修改指令,并根据所述第三修改指令修改所述线程互斥锁变量中的当前值为写状态值。
10.根据权利要求9所述线程访问临界区的系统,其特征在于,所述修改模块还包括第四修改单元;
所述第二访问单元,还用于当所述线程写所述临界区结束后发送第四修改指令到所述第四修改单元;
所述第四修改单元,与所述第一创建模块和第二访问单元相连,用于接收所述第二访问单元发送的第四修改指令,并根据所述第四修改指令修改所述线程互斥锁变量中的当前值为空闲状态值。
11.一种线程访问临界区的终端设备,其特征在于,所述的终端设备包括权利要求6-10任一种所述的线程访问临界区的系统。
CN2012101211833A 2012-04-23 2012-04-23 一种线程访问临界区的方法、系统和终端设备 Pending CN102662747A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2012101211833A CN102662747A (zh) 2012-04-23 2012-04-23 一种线程访问临界区的方法、系统和终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2012101211833A CN102662747A (zh) 2012-04-23 2012-04-23 一种线程访问临界区的方法、系统和终端设备

Publications (1)

Publication Number Publication Date
CN102662747A true CN102662747A (zh) 2012-09-12

Family

ID=46772246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012101211833A Pending CN102662747A (zh) 2012-04-23 2012-04-23 一种线程访问临界区的方法、系统和终端设备

Country Status (1)

Country Link
CN (1) CN102662747A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103853529A (zh) * 2014-02-21 2014-06-11 北京神舟航天软件技术有限公司 并发程序设计中减少临界区保护机制开销的优化方法
CN104268024A (zh) * 2014-09-24 2015-01-07 浪潮(北京)电子信息产业有限公司 一种实现进程互斥的方法和装置
CN105224251A (zh) * 2015-09-28 2016-01-06 浪潮(北京)电子信息产业有限公司 一种基于Linux的读写锁优化方法和系统
CN105975349A (zh) * 2016-05-04 2016-09-28 北京智能管家科技有限公司 一种线程锁的优化方法
CN107239415A (zh) * 2016-03-28 2017-10-10 华为技术有限公司 一种执行临界区操作的方法及装置
CN109271258A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 读写锁重入的实现方法、装置、终端及存储介质
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质
CN110221923A (zh) * 2019-06-06 2019-09-10 北京字节跳动网络技术有限公司 数据访问方法、装置及设备
CN110764880A (zh) * 2019-09-06 2020-02-07 长沙新弘软件有限公司 一种基于原子操作的三态控制方法
CN113358924A (zh) * 2021-04-30 2021-09-07 南方电网数字电网研究院有限公司 一种多线程双芯智能电表分时计量处理方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1917504A (zh) * 2005-08-20 2007-02-21 中兴通讯股份有限公司 一种避免资源数据共享访问导致死锁的加锁方法
CN1920780A (zh) * 2006-08-15 2007-02-28 杭州华为三康技术有限公司 访问临界区的方法和系统
US20070067774A1 (en) * 2005-08-30 2007-03-22 Alexey Kukanov Fair scalable reader-writer mutual exclusion
CN101631328A (zh) * 2009-08-14 2010-01-20 北京星网锐捷网络技术有限公司 一种对共享资源互斥访问的同步方法、装置和网络设备
US20100088476A1 (en) * 2008-09-05 2010-04-08 International Business Machines Corporation Method for allowing exclusive access to shared data
CN102141932A (zh) * 2010-12-14 2011-08-03 清华大学 大临界区保护方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1917504A (zh) * 2005-08-20 2007-02-21 中兴通讯股份有限公司 一种避免资源数据共享访问导致死锁的加锁方法
US20070067774A1 (en) * 2005-08-30 2007-03-22 Alexey Kukanov Fair scalable reader-writer mutual exclusion
CN1920780A (zh) * 2006-08-15 2007-02-28 杭州华为三康技术有限公司 访问临界区的方法和系统
US20100088476A1 (en) * 2008-09-05 2010-04-08 International Business Machines Corporation Method for allowing exclusive access to shared data
CN101631328A (zh) * 2009-08-14 2010-01-20 北京星网锐捷网络技术有限公司 一种对共享资源互斥访问的同步方法、装置和网络设备
CN102141932A (zh) * 2010-12-14 2011-08-03 清华大学 大临界区保护方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
孙建杰,陈佳品: "《临界区读写锁的实现》", 《计算机与现代化》 *
张雪松,王鸿磊: "《MFC多线程同步类的使用》", 《福建电脑》 *
陈晓龙: "多线程同步资源冲突解决方法", 《微型电脑应用》 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103853529A (zh) * 2014-02-21 2014-06-11 北京神舟航天软件技术有限公司 并发程序设计中减少临界区保护机制开销的优化方法
CN103853529B (zh) * 2014-02-21 2017-03-01 北京神舟航天软件技术有限公司 并发程序设计中减少临界区保护机制开销的优化方法
CN104268024B (zh) * 2014-09-24 2018-02-23 浪潮(北京)电子信息产业有限公司 一种实现进程互斥的方法和装置
CN104268024A (zh) * 2014-09-24 2015-01-07 浪潮(北京)电子信息产业有限公司 一种实现进程互斥的方法和装置
CN105224251A (zh) * 2015-09-28 2016-01-06 浪潮(北京)电子信息产业有限公司 一种基于Linux的读写锁优化方法和系统
CN105224251B (zh) * 2015-09-28 2018-09-25 浪潮(北京)电子信息产业有限公司 一种基于Linux的读写锁优化方法和系统
CN107239415B (zh) * 2016-03-28 2020-02-14 华为技术有限公司 一种执行临界区操作的方法及装置
CN107239415A (zh) * 2016-03-28 2017-10-10 华为技术有限公司 一种执行临界区操作的方法及装置
CN105975349A (zh) * 2016-05-04 2016-09-28 北京智能管家科技有限公司 一种线程锁的优化方法
CN109271258A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 读写锁重入的实现方法、装置、终端及存储介质
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质
CN109271258B (zh) * 2018-08-28 2020-11-17 百度在线网络技术(北京)有限公司 读写锁重入的实现方法、装置、终端及存储介质
US11119832B2 (en) 2018-08-28 2021-09-14 Baidu Online Network Technology (Beijing) Co., Ltd. Method and device for implementing read-write lock reentry, terminal and storage medium
CN110221923A (zh) * 2019-06-06 2019-09-10 北京字节跳动网络技术有限公司 数据访问方法、装置及设备
CN110221923B (zh) * 2019-06-06 2021-06-08 北京字节跳动网络技术有限公司 数据访问方法、装置及设备
CN110764880A (zh) * 2019-09-06 2020-02-07 长沙新弘软件有限公司 一种基于原子操作的三态控制方法
CN113358924A (zh) * 2021-04-30 2021-09-07 南方电网数字电网研究院有限公司 一种多线程双芯智能电表分时计量处理方法及装置

Similar Documents

Publication Publication Date Title
CN102662747A (zh) 一种线程访问临界区的方法、系统和终端设备
JP6486485B2 (ja) 車載制御装置
CN103399856A (zh) 面向scada系统的爆发式数据缓存处理系统及其方法
CN105117285B (zh) 一种基于移动虚拟化系统的非易失性存储器调度优化方法
CN101876911B (zh) 基于PCI/PCIe总线多CPU系统启动方法及模块
CN104461707A (zh) 一种锁请求处理方法及装置
CN109165728A (zh) 一种卷积神经网络的基本计算单元及计算方法
CN103279309A (zh) 基于fpga的ddr控制装置及方法
CN100593146C (zh) 一种防止工业自动化系统雪崩的方法
CN102629220A (zh) 一种动态任务分配管理方法
CN101552840A (zh) 一种降低移动终端功耗的方法及移动终端
CN114490123A (zh) 一种任务处理方法、装置及电子设备和存储介质
CN112162710A (zh) 降低芯片功耗的方法、装置、计算机设备及存储介质
CN102402422A (zh) 处理器组件及该组件内存共享的方法
CN116724287A (zh) 一种内存控制方法及内存控制装置
CN101504632A (zh) 一种dma数据传输方法、系统及一种dma控制器
CN104461957A (zh) 一种异构多核cpu共享片上高速缓存的方法及装置
CN101341471B (zh) 动态高速缓存管理的设备和方法
CN102141938B (zh) 多线程系统中软件负荷的调整方法及装置
CN106155923B (zh) 内存共享的方法和装置
US10452574B2 (en) Read performance on a SATA storage device behind a host bus adapter
CN103970597A (zh) 读写均衡的阻塞队列实现方法及装置
CN104166587A (zh) 一种临界资源的访问装置和方法
CN107832140B (zh) 一种rpc请求控制的方法、存储介质、电子设备和系统
CN101996142B (zh) 一种访问存储器的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 19, building 18, Changhong technology building, 518057 South twelve Road, South tech Zone, Nanshan District hi tech Zone, Guangdong, Shenzhen

Applicant after: SHENZHEN TEMOBI TECHNOLOGY CO., LTD.

Address before: 19, building 18, Changhong technology building, 518057 South twelve Road, South tech Zone, Nanshan District hi tech Zone, Guangdong, Shenzhen

Applicant before: Shenzhen Temobi Science & Tech Development Co.,Ltd.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: SHENZHEN TEMOBI SCIENCE + TECHNOLOGY CO., LTD. TO: SHENZHEN RONGCHANG TIANXIA TECHNOLOGY CO., LTD.

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: RONGCHUANG TIANXIA (SHANGHAI) TECHNOLOGY DEVELOPME

Free format text: FORMER OWNER: SHENZHEN RONGCHANG TIANXIA TECHNOLOGY CO., LTD.

Effective date: 20150610

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150610

Address after: 200433 Shanghai City, Yangpu District Wei Road No. 6 room 502-8

Applicant after: World (Shanghai) Technology Development Co., Ltd.

Address before: 19, building 18, Changhong technology building, 518057 South twelve Road, South tech Zone, Nanshan District hi tech Zone, Guangdong, Shenzhen

Applicant before: SHENZHEN TEMOBI TECHNOLOGY CO., LTD.

WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20120912