本技术涉及计算机,特别涉及一种线程处理方法、装置、系统及存储介质。
背景技术:
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、至少一个处理器;以及,
56、与所述至少一个处理器通信连接的存储器;其中,
57、所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行以实现上述任一实施例所记载的线程处理方法。
58、本技术还提供一种计算机可读存储介质,当存储介质中的指令由线程处理系统对应的处理器执行时,使得线程处理系统能够实现上述任一实施例所记载的线程处理方法。
59、本技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术而了解。本技术的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
60、下面通过附图和实施例,对本技术的技术方案做进一步的详细描述。