对资源限制访问的方法、装置及终端设备制造方法及图纸

技术编号:18763645 阅读:21 留言:0更新日期:2018-08-25 10:25
本发明专利技术涉及互联网技术领域,具体涉及一种对资源限制访问的方法、装置及终端设备,该方法通过定义的自旋锁限制多个线程对资源的同时访问,该自旋锁包括锁计数变量、加锁函数以及解锁函数。当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值,若所述锁计数变量为预设初值,则将锁计数变量配置为预设阈值,以供当前线程占用自旋锁对资源进行访问。当前线程访问完资源后,调用解锁函数将锁计数变量由预设阈值配置为预设初值,以供其他线程调用自旋锁。在本方案中,线程是通过调用系统函数读写锁计数变量,并没有使用系统资源,故节约了系统资源,提高了系统的运行效率。

【技术实现步骤摘要】
对资源限制访问的方法、装置及终端设备
本专利技术涉及互联网
,具体而言,涉及一种对资源限制访问的方法、装置及终端设备。
技术介绍
在现代计算机程序编程中,多线程被广泛运用,为了保护相关的代码或者变量,在多线程中通常采用锁机制来解决。例如在Windows系统中可以自旋锁,互斥体、信号量等方法来实现锁功能。以自旋锁(一般提供加锁的lock函数,以及解锁的unlock函数)为例,利用自旋锁的lock方法对需要保护的代码,数据进行加锁保护,这样其他线程运行到调用该函数地址时,就会被阻塞;调用自旋锁的unlock函数对该代码区域进行解锁。位于lock和unlock之间的代码就是线程安全的,对于有N个线程同时运行的进程来说,同时只有一个线程能够访问到这之间的代码。同理互斥体、信号量、事件都可以用于实现类似的加锁与解锁功能,但是这些与自旋锁的差异性在于互斥体、信号量、事件这些都是系统资源,如果整个系统中使用了大量的这些系统资源,很有可能造成系统运行效率的低下,或者在申请这些资源时,可能导致失败。而自旋锁并不是系统资源,是需要程序员根据相关算法手动实现的。所以如果自旋锁的实现逻辑够好,可以起到不消耗相关系统资源的效果。自旋锁其实现的本质就在于当调用lock加锁时,如果锁计数(通常是一个32位的整型数)不等于0,则说明该自旋锁被别的线程占用,则需要依靠一个while循环不停的等待,直到该锁计数等于0时,才能获取到该锁,并把锁计数设置为1(表示该自旋锁已经被占有),从而退出while循环。而在调用unlock解锁时,就是把该自旋锁的锁计数设置为0。所以锁计数变量就是实现自旋锁功能的关键,因为该锁计数变量会在多个线程中进行读写,所以对该锁计数变量的读写保护就是自旋锁实现过程中的根本所在。目前自旋锁比较常见的实现方式大都是利用一个系统资源的互斥体变量来保护锁计数变量,这种实现方法实现简单,但仍然使用到了系统的互斥体资源,导致系统运行效率低下。
技术实现思路
本专利技术的目的在于提供一种对资源限制访问方法,以实现节约系统资源,提高系统运行效率。本专利技术的另一目的在于提供一种对资源限制访问装置,以实现节约系统资源,提高系统运行效率。本专利技术的另一目的在于提供一种终端设备,以实现节约系统资源,提高系统运行效率。为了实现上述目的,本专利技术实施例采用的技术方案如下:第一方面,本专利技术实施例提供了一种对资源限制访问的方法,所述方法通过定义的自旋锁限制多个线程对资源的同时访问,所述自旋锁包括锁计数变量、加锁函数以及解锁函数,当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值;若所述锁计数变量为预设初值,则将所述锁计数变量配置为预设阈值,以供当前线程占用所述自旋锁对所述资源进行访问;当所述当前线程访问完所述资源后,调用所述解锁函数将所述锁计数变量由所述预设阈值配置为所述预设初值,以供其他线程调用所述自旋锁。第二方面,本专利技术实施例还提供了一种对资源限制访问的装置,所述装置通过定义的自旋锁限制多个线程对资源的同时访问,所述自旋锁包括锁计数变量、加锁函数以及解锁函数,检测模块,用于当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值;第一配置模块,用于若所述锁计数变量为预设初值,则将所述锁计数变量配置为预设阈值,以供当前线程占用所述自旋锁对所述资源进行访问;第二配置模块,用于当所述当前线程访问完所述资源后,调用所述解锁函数将所述锁计数变量由所述预设阈值配置为所述预设初值,以供其他线程调用所述自旋锁。第三方面,本专利技术实施例还提供了一种终端设备,所述终端设备包括存储器和处理器,所述存储器用于存储计算机程序代码,所述处理器用于执行存储于所述存储器中的计算机程序代码以实现所述的对资源限制访问的方法。本专利技术实施例提供的一种对资源限制访问的方法、装置及终端设备,该方法通过定义的自旋锁限制多个线程对资源的同时访问,该自旋锁包括锁计数变量、加锁函数以及解锁函数。当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值,若所述锁计数变量为预设初值,则将锁计数变量配置为预设阈值,以供当前线程占用自旋锁对资源进行访问。当前线程访问完资源后,调用解锁函数将锁计数变量由预设阈值配置为预设初值,以供其他线程调用自旋锁。在本方案中,线程是通过调用系统函数读写锁计数变量,并没有使用系统资源,故节约了系统资源,提高了系统的运行效率。为使本专利技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本专利技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1示出了本专利技术实施例提供的一种终端设备的结构示意图。图2示出了本专利技术实施例提供的一种对资源限制访问的方法的流程示意图。图3示出了本专利技术实施例提供的一种对资源限制访问的装置的功能模块示意图。图示:100-终端设备;110-对资源限制访问的装置;120-存储器;130-存储控制器;140-处理器;150-外设接口;160-输入输出单元;170-音频单元;180-显示单元。具体实施方式下面将结合本专利技术实施例中附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本专利技术实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本专利技术的实施例的详细描述并非旨在限制要求保护的本专利技术的范围,而是仅仅表示本专利技术的选定实施例。基于本专利技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术保护的范围。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本专利技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。在很多情况下会出现多个线程同时访问一个资源的情况,为了对资源进行保护,同时保证访问的有序进行,在同一时间段通常需要限制只允许一个线程对资源进行访问。其限制手段为通过自旋锁对资源进行加锁以阻塞多个线程,亦即是说,当前被自旋锁加锁的线程才能对资源进行访问。在现有技术中,自旋锁的创建通常需要使用互斥体等系统资源,在对多个资源进行加锁的情况下,需要使用大量的系统资源,极有可能导致系统运行效率低下,且在申请系统资源时,可能出现申请失败。由此,本专利技术实施例提供一种对资源限制访问的方法,通过该方法实现使用操作平台提供的系统函数创建自旋锁对资源进行加锁保护,以避免申请系统资源,提高了系统的运行效率。本专利技术实施例提供的一种对资源限制访问的方法应用于终端设备,该终端设备可以是,但不限于,电脑等智能电子设备。请参照图1,是本专利技术实施例提供的一种终端设备100的结构示意图,该终端设备100包括对资源限制访问的装置110、存储器120、存储控制器130、处理器140、外设接口150、输入输出单元160、音频单元170以及显示单元本文档来自技高网
...

【技术保护点】
1.一种对资源限制访问的方法,其特征在于,所述方法通过定义的自旋锁限制多个线程对资源的同时访问,所述自旋锁包括锁计数变量、加锁函数以及解锁函数,当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值;若所述锁计数变量为预设初值,则将所述锁计数变量配置为预设阈值,以供当前线程占用所述自旋锁对所述资源进行访问;当所述当前线程访问完所述资源后,调用所述解锁函数将所述锁计数变量由所述预设阈值配置为所述预设初值,以供其他线程调用所述自旋锁。

【技术特征摘要】
1.一种对资源限制访问的方法,其特征在于,所述方法通过定义的自旋锁限制多个线程对资源的同时访问,所述自旋锁包括锁计数变量、加锁函数以及解锁函数,当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值;若所述锁计数变量为预设初值,则将所述锁计数变量配置为预设阈值,以供当前线程占用所述自旋锁对所述资源进行访问;当所述当前线程访问完所述资源后,调用所述解锁函数将所述锁计数变量由所述预设阈值配置为所述预设初值,以供其他线程调用所述自旋锁。2.如权利要求1所述的方法,其特征在于,所述当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值的步骤包括:当前线程调用所述加锁函数中的由操作系统提供的原子性操作函数检测所述锁计数变量是否为预设初值。3.如权利要求2所述的方法,其特征在于,所述当前线程调用所述加锁函数中的由操作系统提供的原子性操作函数检测所述锁计数变量是否为预设初值的步骤包括:定义所述由操作系统提供的原子性操作函数的参数,所述参数分别为锁计数变量、第一参数和第二参数;若所述锁计数变量与所述第二参数相等,则所述锁计数变量为预设初值。4.如权利要求1所述的方法,其特征在于,所述当前线程调用所述加锁函数中的指定函数检测所述锁计数变量是否为预设初值的步骤包括:所述当前线程调用所述加锁函数中的由C++11提供的原子性操作函数检测所述锁计数变量是否为预设初值。5.如权利要求4所述的方法,其特征在于,所述当前线程调用所述加锁函数中的由C++11提供的原子性操作函数检测所述锁计数变量是否为预设初值的步骤包括:定义所述由C++11...

【专利技术属性】
技术研发人员:杨亮张文明陈少杰
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

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

1