一种动态回收资源的方法及系统的制作方法_2

文档序号:9326746阅读:来源:国知局
释为对本发明的限制。
[0046]本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
[0047]本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
[0048]图1示出了本发明实施例的一种动态回收资源的方法的流程图。
[0049]如图1所示,本发明实施例提出的动态回收资源的方法包括以下步骤:
[0050]SI 1、创建共享资源的active链表和inactive链表;
[0051]其中,active链表用于存放当前活跃的资源,inactive链表用于存放线程将要对其进行删除的资源。初始化时,共享资源都挂在active链表上。
[0052]S12、创建资源回收线程,并将所述共享资源的删除接口注册到所述资源回收线程;
[0053]S13、当某一线程删除所述共享资源时,将所述共享资源从active链表移动到inactive链表中,并向所述资源回收线程发送通知消息;
[0054]S14、在所述资源回收线程接收到所述通知消息后,通过所述资源回收线程对所述inactive链表中的共享资源进行删除。
[0055]具体的,所述步骤Sll中创建共享资源的active链表和inactive链表的步骤和步骤S12中创建资源回收线程的步骤是在系统初始化时执行的。
[0056]可理解的是,共享资源为系统中多个线程均可以使用的内存资源,且当一个线程占有该资源的时候,其他线程不能拥有该资源,如果想要拥有通常要等待该资源被释放。共享资源的删除接口的注册可通过函数功能实现。
[0057]本发明实施例,通过为共享资源创建两个链表和一个资源回收线程,并将所述共享资源的删除接口注册到所述资源回收线程,其中,两个链表分别为active链表和inactive链表,当某一线程删除所述共享资源时,将共享资源从active链表移动到inactive链表中,并向资源回收线程发送通知消息,以使资源回收线程在接收到通知消息后,对所述inactive链表中的共享资源进行删除。
[0058]本发明在整个资源管理过程中,不需要其他具体功能的线程参与,这些线程在删除共享资源时不需要等待,可以继续做其他关键的事情,同时由于为共享资源构建了active和inactive两个链表,且删除任务是由一个单独的线程来做的,可以最大限度的减少资源冲突,避免了资源被某个线程误删除给其他线程带来的访问风险。
[0059]在本发明实施例中,步骤S14中的在所述资源回收线程接收到所述通知消息后,通过所述资源回收线程对所述inactive链表中的共享资源进行删除,进一步包括以下图中未示出的步骤:
[0060]S141、判断所述inactive链表中的共享资源当前是否处于执行状态;具体的,所述共享资源的非执行状态包括:共享资源还没有执行和共享资源已经执行完毕两种状态。
[0061]当所述共享资源当前处于非执行状态时,执行步骤S142,当所述共享资源当前处于执行状态,执行步骤S143。
[0062]S142、通过所述资源回收线程直接删除所述共享资源;
[0063]S143、重新将所述共享资源的删除接口注册到所述资源回收线程,以使所述资源回收线程实时监测所述共享资源的执行状态。
[0064]更进一步地,所述方法还包括步骤S144:
[0065]S144、当所述资源回收线程监测到所述共享资源执行完毕后,通过所述资源回收线程删除所述共享资源。
[0066]在本发明实施例中,步骤S13中的将所述共享资源从active链表移动到inactive链表中之后,所述方法还包括:
[0067]周期性地检测所述共享资源是否到达所述inactive链表中。
[0068]本发明通过为共享资源构建active和inactive两个链表,且删除任务是由一个单独的线程来做的,可以最大限度的减少资源冲突,避免了资源被某个线程误删除给其他线程带来的访问风险。
[0069]定时器在系统中使用非常广泛,下面以定时器资源为具体实施例对本发明进行具体说明。通常在删除定时器时,需要判断定时器是否正在执行,如果定时器正在执行,那么就无法删除,而且定时器也永远无法删除自己,因为自己正在执行,是不能删除自己的。
[0070]以对定时器资源进行删除操作为例来说明本发明,具体实现过程如下:
[0071]I)系统初始化时,创建两个定时器链表,active链表和inactive链表;
[0072]2)系统初始化时,创建回收线程thread,专门用来回收废弃资源;
[0073]3)将定时器资源的删除接口 del_funct1n向回收线程thread注册;
[0074]4)初始化时的定时器都挂在active链表上;
[0075]5)当需要删除定时器资源时,将定时器资源从active链表摘下,移放到inactive链表中,并通知thread有废弃资源可以删除了 ;
[0076]6) thread得到消息,开始执行定时器模块注册的删除操作。由于定时器从active上摘下,那么就只有两种情况了,一种是这个定时器还没有执行(或者已经执行完),一种是正在执行。如果是还没有执行的话,那么该定时器已经从active上摘下了,后续从链表上已经找不到了,因此是不会再次执行了,且当前该定时器没有执行,那么就可以直接删除掉。如果该定时器正在执行,那么就重新注册del_funct1n,使thread可以继续检查定时器是否还在执行,由于定时器已经从active摘下,那么实际上当定时器执行完就不会再执行了,因此thread总会发现定时器没有执行,这时定时器就可以安全的删掉了。
[0077]本实施例在整个删除过程不需要其他具体功能的线程参与,这些线程在删除定时器时不需要等待,可以继续做其他关键的事情,同时由于使用了 active和inactive两个链表,且删除任务是由一个线程来做的,可以最大限度的减少资源冲突,避免了资源被某个线程误删除,但是其他线程正在访问的风险。同时该方法可以广泛的应用到其他资源回收的场景。
[0078]图2示出了本发明实施例提出的一种动态回收资源的系统的结构框图。
[0079]如图2所示,本发明实施例提出的动态回收资源的系统包括:链表构建模块101、回收线程构建模块102、链表删除模块103和处理模块104,其中:
[0080]所述的链表构建模块101,用于创建共享资源的active链表和inactive链表;
[0081]所述的回收线程构建模块102,用于创建资源回收线程,并将所述共享资源的删除接口注册到所述资源回收线程;
[0082]所述的链表删除模块103,用于当某一线程删除所述共享资源时,将所述共享资源从active链表移动到inactive链表中,并向所述资源回收线程发送通知消息;
[0083]所述的处理模块104,用于在所述资源回收线程接收到所述通知消息后,通过所述资源回收线程对所述in
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1