System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,特别涉及一种线程处理方法、装置、系统及存储介质。
技术介绍
1、在现有的操作系统内核中,为了防止两个或多个线程同时访问一个资源造成冲突的情况发生,当存在一个线程对资源进行访问时,则对该资源进行锁定,其他线程需要进入等待队列中进行等待。现有技术中,对于等待队列的管理,是通过链表实现的,如图2所示的双层链表结构,在唤醒线程时,需要遍历双层链表得到优先级最高的线程进行唤醒,在检索量较大的场景下,降低了查找效率。
2、因此,亟需提供一种线程处理方法,以提升查找效率。
技术实现思路
1、本申请提供一种线程处理方法、装置、系统及存储介质,用以提升查找效率。
2、本申请提供一种线程处理方法,包括:
3、当第一线程需要访问目标资源时,判断所述目标资源是否被占用;
4、当所述目标资源处于被占用状态时,对用于挂起线程的树结构等待队列进行抢占;
5、在所述树结构等待队列抢占成功后,判断用于存储线程的树结构等待队列中是否存在所述目标资源的地址节点;
6、当不存在目标资源的地址节点时,创建所述目标资源的地址节点以及所述地址节点的子节点;
7、将所述第一线程存储至所述子节点中的左侧子节点中,其中,所述左侧子节点中存储的线程为优先级最高的线程,且所述左侧子节点存储的线程是最先被唤醒的线程。
8、本申请的有益效果在于:本申请中,当第一线程对应的目标资源被占用时,将第一线程存储至树结构等待队列的左侧子节
9、在一个实施例中,所述判断所述目标资源是否被占用,包括:
10、检测所述目标资源的锁状态;
11、当所述目标资源处于上锁状态时,确定所述目标资源被占用;
12、当所述目标资源处于解锁状态时,确定所述目标资源未被占用。
13、在一个实施例中,所述对用于挂起线程的树结构等待队列进行抢占,包括:
14、判断所述树结构等待队列是否被占用;
15、当所述树结构等待队列未被占用时,对所述树结构等待队列进行上锁操作,以实现对所述树结构等待队列的抢占。
16、在一个实施例中,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还包括:
17、对所述树结构等待队列进行解锁操作,以实现对所述树结构等待队列的释放。
18、在一个实施例中,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还包括:
19、当第二线程需要访问目标资源时,对所述第一线程和所述第二线程的优先级进行比较;
20、当第一线程的优先级大于或等于所述第二线程的优先级时,将所述第二线程存储至所述子节点中的右侧子节点中;
21、当第一线程的优先级小于所述第二线程的优先级时,将所述第一线程由子节点中的左侧子节点中转移至子节点中的右侧子节点中,并将所述第二线程存储至所述子节点中的左侧子节点中。
22、在一个实施例中,所述方法还包括:
23、当所述目标资源由被占用状态变更为释放状态时,从所述地址节点下的左侧子节点中获取优先级最高的线程;
24、通过所述优先级最高的线程调用所述目标资源。
25、在一个实施例中,在通过所述优先级最高的线程调用所述目标资源之前,所述方法还包括:
26、调用所述目标资源的互斥锁对所述目标资源进行上锁操作;
27、在通过所述优先级最高的线程调用所述目标资源之后,所述方法还包括:
28、对所述目标资源进行解锁操作。
29、本申请还提供一种线程处理装置,包括:
30、第一判断模块,用于当第一线程需要访问目标资源时,判断所述目标资源是否被占用;
31、抢占模块,用于当所述目标资源处于被占用状态时,对用于挂起线程的树结构等待队列进行抢占;
32、第二判断模块,用于在所述树结构等待队列抢占成功后,判断用于存储线程的树结构等待队列中是否存在所述目标资源的地址节点;
33、创建模块,用于当不存在目标资源的地址节点时,创建所述目标资源的地址节点以及所述地址节点的子节点;
34、存储模块,用于将所述第一线程存储至所述子节点中的左侧子节点中,其中,所述左侧子节点中存储的线程为优先级最高的线程,且所述左侧子节点存储的线程是最先被唤醒的线程。
35、在一个实施例中,所述第一判断模块,包括:
36、检测子模块,用于检测所述目标资源的锁状态;
37、确定子模块,用于当所述目标资源处于上锁状态时,确定所述目标资源被占用;
38、所述确定子模块,还用于当所述目标资源处于解锁状态时,确定所述目标资源未被占用。
39、在一个实施例中,所述抢占模块,包括:
40、第一判断子模块,用于判断所述树结构等待队列是否被占用;
41、上锁子模块,用于当所述树结构等待队列未被占用时,对所述树结构等待队列进行上锁操作,以实现对所述树结构等待队列的抢占。
42、在一个实施例中,还包括:
43、解锁模块,用于在将所述第一线程存储至所述子节点中的左侧子节点中之后,对所述树结构等待队列进行解锁操作,以实现对所述树结构等待队列的释放。
44、在一个实施例中,所述装置还包括:
45、比较模块,用于在将所述第一线程存储至所述子节点中的左侧子节点中之后,当第二线程需要访问目标资源时,对所述第一线程和所述第二线程的优先级进行比较;
46、所述存储模块,还用于当第一线程的优先级大于或等于所述第二线程的优先级时,将所述第二线程存储至所述子节点中的右侧子节点中;
47、所述存储模块,还用于当第一线程的优先级小于所述第二线程的优先级时,将所述第一线程由子节点中的左侧子节点中转移至子节点中的右侧子节点中,并将所述第二线程存储至所述子节点中的左侧子节点中。
48、在一个实施例中,所述装置还包括:
49、获取模块,用于当所述目标资源由被占用状态变更为释放状态时,从所述地址节点下的左侧子节点中获取优先级最高的线程;
50、调用模块,用于通过所述优先级最高的线程调用所述目标资源。
51、在一个实施例中,所述装置还包括:
52、上锁模块,用于调用所述目标资源的互斥锁对所述目标资源进行上锁操作;
53、解锁模块,用于对所述目标资源进行解锁操作。
54、本申请还提供一种线程处理系统,包括:
55、至少一个处理器;以及,
本文档来自技高网...【技术保护点】
1.一种线程处理方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述判断所述目标资源是否被占用,包括:
3.如权利要求1所述的方法,其特征在于,所述对用于挂起线程的树结构等待队列进行抢占,包括:
4.如权利要求1所述的方法,其特征在于,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还包括:
5.如权利要求1所述的方法,其特征在于,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还包括:
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
7.如权利要求6所述的方法,其特征在于,在通过所述优先级最高的线程调用所述目标资源之前,所述方法还包括:
8.一种线程处理装置,其特征在于,包括:
9.一种线程处理系统,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,当存储介质中的指令由线程处理系统对应的处理器执行时,使得线程处理系统能够实现如权利要求1-7任一项所述的线程处理方法。
【技术特征摘要】
1.一种线程处理方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述判断所述目标资源是否被占用,包括:
3.如权利要求1所述的方法,其特征在于,所述对用于挂起线程的树结构等待队列进行抢占,包括:
4.如权利要求1所述的方法,其特征在于,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还包括:
5.如权利要求1所述的方法,其特征在于,在将所述第一线程存储至所述子节点中的左侧子节点中之后,所述方法还...
【专利技术属性】
技术研发人员:赵美晶,
申请(专利权)人:北京罗克维尔斯科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。