基于虚拟内核对象的linux程序检查点用户级实现方法_第1页
基于虚拟内核对象的linux程序检查点用户级实现方法_第2页
基于虚拟内核对象的linux程序检查点用户级实现方法_第3页
基于虚拟内核对象的linux程序检查点用户级实现方法_第4页
基于虚拟内核对象的linux程序检查点用户级实现方法_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

说说 明明 书书 摘摘 要要 本发明公开了一种基于虚拟内核对象的 Linux 程序检查点用户级实现方法, 在应用层与系统 API 层之间插入检查点层,其中检查点层包括应用线程检查 点控制层和内核对象状态跟踪记录与对象引用映射层,应用层对系统 API 的 调用被重定向到检查点层;对应用线程设置执行位置标志;控制应用线程的检 查点不落入内核对象状态跟踪记录与对象引用映射层、系统 API 层和内核层 中。本发明在用户级为 Linux 应用程序进程在不同机器之间的迁移,为进程在 动态环境下基于检查点的正确恢复提供支持,以实现负载平衡、系统容错和高 效软件排错。 1 摘摘 要要 附附 图图 系统API层 应用层 内核对象 内核对象状态跟踪记录与对象引用映射层 应用线程检查点控制层 中断点 检查点层 中断例程 执行代码流执行代码流 内核层原子方式执行 1 权 利 要 求 书 1、一种基于虚拟内核对象的 Linux 程序检查点用户级实现方法,其特征 在于,在应用层与系统 API 层之间插入检查点层,其中检查点层包括应用线 程检查点控制层和内核对象状态跟踪记录与对象引用映射层,应用层对系统 API 的调用被重定向到检查点层,对应用线程设置执行位置标志:当应用线程 的执行从应用层移入检查点层时,置位其执行位置标志,当应用线程的执行从 应用线程检查点控制层返回应用层时复位其执行位置标志;控制应用线程的检 查点不落入内核对象状态跟踪记录与对象引用映射层、系统 API 层和内核层 中,进程检查点实现方法如下: 进程启动执行时,执行检查点初始化例程,完成系统 API 截获、检查点 线程创建、检查点参数读取操作;该进程的进程检查点过程包括如下三个阶段: 1) 使该进程的所有应用线程进入检查点就绪状态;该进程的检查点线程置 位检查点标志,触发检查点中断信号;该进程的所有应用线程的执行将 被中断,转去执行中断例程,在中断例程中,应用线程如果发现自己的 执行位置标志在复位状态,则调用检查点例程;对执行位置标志为置位 状态的应用线程,其执行从中断例程返回,并将移入应用线程检查点控 制层,调用检查点例程;在检查点例程中,应用线程释放其拥有的所有 同步对象,获取自身线程上下文,然后进入检查点就绪状态,等待进程 状态快照完成; 2) 进程状态快照获取:在该进程的所有应用线程进入检查点就绪状态后, 该进程的检查点线程做进程状态快照,内容包括该进程的应用线程上下 文、所有虚拟内核对象、应用线程栈,以及该进程中应用程序使用的堆、 2 全局变量、申请的内存数据块; 3) 执行恢复:进程状态快照完成后,该进程的检查点线程触发所有应用线 程恢复执行:应用线程恢复拥有其在第一阶段释放的同步对象,然后等 待检查点线程的通知,在所有应用线程都恢复拥有其同步对象之后,检 查点线程触发所有应用线程恢复执行,运行态线程恢复其正常执行,等 待态线程则重新调用等待 API 函数进入等待状态。 1 说说 明明 书书 基于虚拟内核对象的基于虚拟内核对象的 LinuxLinux 程序检查点用户级实现方法程序检查点用户级实现方法 技术领域技术领域 本发明涉及一种捕获 Linux 应用程序进程状态,以及恢复进程状态使其继 续执行的方法,具体是一种基于虚拟内核对象的 Linux 程序检查点用户级实现 方法。 背景技术背景技术 进程检查点可以分别在操作系统级、用户级或者应用级实现,各有其特点。 操作系统级实现的进程检查点对用户程序透明,容易得到进程的内核数据结构, 但需要修改系统内核,其可配置性和移植性差,检查点开销也大。用户级的进 程检查点将检查点功能实现部分编译为一个库并链接到应用程序,可以实现对 应用程序透明,具有易于配置且开销较小的特点。不过其实现机制与操作系统 平台相关,平台移植性较差。应用级检查点的优点是能够实现平台无关性,可 在不同的操作系统间移植,其不足之处是对应用的限定多,只能对部分应用程 序有效。 由于用户级的进程检查点具有对应用程序透明、易于配置、开销较小且实 用等特点,因此很多检查点系统都选择在用户级实现。 Unix、Windows、Linux 是目前使用最广的操作系统,在用户级实现进程检查 点都已有一些方法。 进程状态包括用户空间状态和内核空间状态。用户空间状态在进程用户地 址空间和 CPU 寄存器中,在用户级可以直接对其进行访问。内核空间状态是 指与目标进程相关的系统内核对象及其状态。内核空间由操作系统管理,在用 2 户级不能对其直接进行访问。现有获取内核空间状态的方法是跟踪进程对系统 API 的调用,然后基于跟踪信息来判定内核空间状态。 进程用户空间状态和内核空间状态存在耦合关系,即用户空间状态中存有 内核空间中相关对象的引用。在用户级对系统内核对象进行访问操作,要求通 过调用系统 API 来实现。在用户级通过调用系统 API 来创建(打开)系统内核对 象时,操作系统返回一个对象引用。随后应用程序对内核对象的访问都是使用 对象引用作为标识参数调用相应系统 API 来完成。在恢复时,系统重启,使 用检查点信息来恢复进程状态,使进程从检查点状态继续执行。现有内核空间 状态恢复方法是使用检查点信息通过系统 API 调用来完成。这种内核空间状 态恢复方法不能实现严格一致的恢复,恢复后的用户空间状态和内核空间状态 的耦合关系有可能被打破。具体来说,就是恢复时操作系统所给的对象引用与 保存在用户空间状态中的对象引用不一定相同。这种对象引用不重现特性给进 程恢复执行带来问题。故障恢复后的执行中,应用程序会使用恢复前的对象引 用去访问恢复后所创建的内核对象,导致应用程序恢复执行失败。 针对该问题,现有解决方法包括对象引用复制方法和虚拟对象方法。在对 象引用复制方法中,恢复时反复调用对象引用复制函数,直至系统返回一个相 同的引用值。该方法的问题是有可能复制不出一个相同的引用值而使恢复失败。 在虚拟对象方法中,应用程序使用虚拟对象引用访问内核对象,检查点系统负 责管理虚拟对象引用和真实对象引用,在应用程序访问内核对象时负责把虚拟 对象引用转换成真实对象引用。做检查点时,在用户级对应用线程的控制是一 种异步操作,应用线程的检查点位置具有不确定性。当应用线程检查点位于系 统 API 调用代码、系统 API 代码或者内核代码中时,检查点中记录的内核对 象状态可能与真实的内核对象状态不一致。虚拟对象方法依然存在恢复不成功 3 的隐患。图 1 为恢复不成功的例子。我们知道,程序可看作由计算、系统 API 调用这样的单元串接而成。图 1 中假定应用线程检查点落在设置文件指针这个 系统 API 代码中。重启恢复执行会有如下两个问题:1)使用原来的文件引用 (h=1)去访问恢复后的内核文件对象(由于不能严格一致恢复,文件引用已变 为 h=3),执行失败; 2)即使恢复后没有引用问题,恢复时使用检查点信息把 文件指针恢复为 p=5,设置文件指针 API 调用返回后,p=8, 而实际应该等于 5,产生逻辑错误。 发明内容发明内容 针对现有技术存在的上述缺陷,本发明旨在提供一种基于虚拟内核对象的 Linux 程序检查点用户级实现方法,改变程序执行中的函数调用关系,使得原 有的不可控耦合关系变成可控的耦合关系,控制应用线程检查点不落在系统 API 调用代码、系统 API 代码或者内核代码中;本发明是一种捕获 Linux 应用 程序进程状态,以及恢复进程状态使其继续执行的方法,在用户级为 Linux 应 用程序进程在不同机器之间的迁移,为进程在动态环境下基于检查点的正确恢 复提供支持,以实现负载平衡、系统容错和高效软件排错。 为达到上述发明目的,本发明的技术方案是:一种基于虚拟内核对象的 Linux 程序检查点用户级实现方法,在应用层与系统 API 层之间插入检查点层, 其中检查点层包括应用线程检查点控制层和内核对象状态跟踪记录与对象引用 映射层,应用层对系统 API 的调用被重定向到检查点层;对应用线程设置执 行位置标志:当应用线程的执行从应用层移入检查点层时,置位其执行位置标 志,当应用线程的执行从应用线程检查点控制层返回应用层时复位其执行位置 标志;控制应用线程的检查点不落入内核对象状态跟踪记录与对象引用映射层、 系统 API 层和内核层中,进程检查点实现方法如下: 4 进程启动执行时,执行检查点初始化例程,完成系统 API 截获,即系统 API 调用重定向、检查点线程创建、检查点参数读取操作;该进程的进程检查 点过程包括如下三个阶段: 1) 使该进程的所有应用线程进入检查点就绪状态;该进程的检查点线程置 位检查点标志,触发检查点中断信号;该进程的所有应用线程的执行将 被中断,转去执行中断例程,在中断例程中,应用线程如果发现自己的 执行位置标志在复位状态,则调用检查点例程;对执行位置标志为置位 状态的应用线程,其执行从中断例程返回,并将移入应用线程检查点控 制层,调用检查点例程;在检查点例程中,应用线程释放其拥有的所有 同步对象,获取自身线程上下文,然后进入检查点就绪状态,等待进程 状态快照完成; 2) 进程状态快照获取:在该进程的所有应用线程进入检查点就绪状态后, 该进程的检查点线程做进程状态快照,包括该进程的应用线程上下文、 所有虚拟内核对象、应用线程栈,以及该进程中应用程序使用的堆、全 局变量、申请的内存数据块; 3) 执行恢复:进程状态快照完成后,该进程的检查点线程触发所有应用线 程恢复执行:应用线程恢复拥有其在第一阶段释放的同步对象,然后等 待检查点线程的通知,在所有应用线程都恢复拥有其同步对象之后,检 查点线程触发所有应用线程恢复执行,运行态线程恢复其正常执行,等 待态线程则重新调用等待 API 函数进入等待状态。 基于检查点的进程恢复执行过程如下: 进程重启执行时,主线程首先调用检查点初始化例程,然后检查是否为进 程恢复。如果是,则执行恢复例程。在恢复例程中,主线程首先读取要恢复的 5 检查点,然后基于检查点信息恢复所有虚拟内核对象,并通过系统 API 调用 创建相应同步对象,将其状态设为相应虚拟内核对象的状态,再以线程上下文 所在内存地址为传递参数创建子线程。子线程入口函数不是原有线程函数,而 是一个只包含调用系统 API 函数 siglongjmp( )语句的函数。被创建的子线程一 启动就使用传递参数调用系统 API 函数 siglongjmp( )恢复其线程上下文。主线 程创建完子线程后,从检查点中读取自己栈指针值,然后调用一递归函数来减 小自己栈指针,直至其小于检查点中保存的值,然后使用检查点数据,恢复进 程用户空间状态,其中包括自己线程栈数据(从保存的栈指针至栈底这段内存 中的数据) ,子线程栈数据,堆,全局变量,以及应用申请的内存数据块。最 后主线程调用系统 API 函数 siglongjmp( )恢复其线程上下文。在所有应用线程 恢复了上下文之后,检查点线程触发所有应用线程恢复执行。应用线程恢复其 原拥有的同步对象,然后等待检查点线程的通知。在所有应用线程都恢复拥有 其同步对象之后,检查点线程触发所有应用线程恢复执行。运行态线程恢复其 正常执行,等待态线程则重新调用等待 API 进入等待状态。至此,进程恢复 完毕。 本发明的工作原理详细描述如下: 所述基于虚拟内核对象的 Linux 程序检查点用户级实现方法,在应用层与 系统 API 层之间插入虚拟内核对象层(检查点层) ,应用代码不再直接通过调 用系统 API 去访问内核对象了,而是被重定向去访问对应的虚拟内核对象。 对应用层请求的操作,虚拟内核对象再调用相应系统 API 来完成。这样,系 统 API 层对应用层就不再可见(即透明) 。虚拟内核对象跟踪记录相应内核对 象的属性值,同时维护两个对象引用值:提供给应用层的虚拟对象引用值,相 应内核对象的真实对象引用值。真实对象引用值只对虚拟内核对象可见,对应 6 用层不可见。这样真实对象引用值在用户地址空间中的存储就具有了可管理性, 检查点系统能够管理其内存存储地址。针对上述虚拟内核对象,须要对应用线 程的检查点进行控制。对应用线程检查点的控制有两个要求:1)保证虚拟内 核对象的属性值与相应内核对象的属性值完全一致;2)在用户空间状态中, 真实对象引用值除了出现在对应虚拟内核对象的成员变量中外,不能出现在其 它任何地方(例如线程栈中) 。真实对象引用值出现在其他地方是完全可能的, 例如,当虚拟内核对象调用系统 API 时,它将作为传递参数出现在线程栈中。 在本发明方法中,检查点层分成两层:应用线程检查点控制层和内核对象 状态跟踪记录与对象引用映射层,应用线程检查点控制层控制其下的代码段就 检查点而言以原子方式执行,即线程检查点不落入其中,以满足上述应用线程 检查点控制要求。 具体的控制方法如下:程序启动执行时,主线程首先调用检查点初始化例 程,完成系统 API 截获(系统 API 调用重定向) 、检查点线程创建、检查点参 数读取等操作。系统 API 截获的目的是在应用层与系统 API 层之间插入检查 点层,也称之为虚拟内核对象层。检查点线程的功能是与应用线程协同来完成 进程检查点和进程恢复。 上述系统 API 截获为已有技术,虚拟内核对象类的定义也可参照系统 API 确定。关键点是应用线程检查点的控制,其控制方法如下: 应用线程检查点控制层的开始操作就是宣布调用线程进入系统调用(给线 程的执行位置标志置位),结尾操作是宣布调用线程从系统调用返回(给线程的 执行位置标志复位)。当要做检查点时,检查点线程设置检查点标志,触发检 查点中断信号。在此时刻点,应用线程可分两类:1)其执行位置标志为复位 7 状态;2)其执行位置标志为置位状态。任一应用线程只可能属于一类。执行 位置标志为复位状态的线程肯定为运行态线程。而执行位置标志为置位状态的 线程可能为运行态线程,也可能为等待态线程。在检查点线程触发检查点中断 信号后,所有应用线程的执行将被中断,转去执行中断例程。在中断例程中, 应用线程首先检查自己的执行位置标志,如果在复位状态,表明其中断点在应 用层中,满足应用线程检查点控制的两个要求,于是调用检查点例程。如果执 行位置标志在置位状态,表明其中断点不在应用层中,应用线程检查点控制的 两个要求可能不能得到满足,因此不能调用检查点例程,只能从中断例程直接 返回,继续执行。对运行态的应用线程,其执行将会迅速移入应用线程检查点 控制层,调用检查点例程。运行态的线程在检查点例程中释放其拥有的同步对 象,获取自身线程上下文,然后进入检查点就绪状态,等待进程状态快照的完 成。等待态的应用线程从中断例程返回后继续处于等待态。不过当运行态的线 程在检查点例程中释放其拥有的同步对象之后,等待态的应用线程会被唤醒, 转为运行态,其执行也会移入应用线程检查点控制层,调用检查点例程,释放 其拥有的同步对象,进入检查点就绪状态。因此这种策略能够保证所有应用线 程都将调用检查点例程,而且其检查点不会落入内核对象状态跟踪记录与对象 引用映射层、系统 API 层和内核层中,以满足线程检查点控制的两个要求。 为了做检查点,所有应用线程都释放了其拥有的同步对象,等待态的应用 线程也转到了运行态。在做完了检查点之后,原有的状态必须得到恢复。因此 恢复分两个阶段:1)所有应用线程恢复其在检查点标志被设置时刻点之前拥 有的同步对象;2)运行态线程恢复其正常执行,而等待态线程则重新调用等 待 API 进入等待状态。只有所有应用线程都完成第一阶段恢复之后,第二阶 段才能开始,以保证应用线程之间的同步逻辑关系不被改变。 8 综上所述,本发明是一种捕获 Linux 应用程序进程状态,以及恢复进程状 态使其继续执行的方法,在用户级为 Linux 应用程序进程在不同机器之间的迁 移,为进程在动态环境下基于检查点的正确恢复提供支持,以实现负载平衡、 系统容错、高效软件排错。 附图说明附图说明 图 1 是现有检查点实现方法示意图; 图 2 是本发明中进程状态耦合关系分解与一致性控制策略示意图; 图 3 是本发明中应用线程的检查点控制策略示意图; 图 4 是实施例中检查点线程与应用线程之间协同做进程检查点的时序图; 图 5 是实施例中进程从检查点状态恢复执行的时序图。 在附图 3 中中断例程,应用线程检查点控制例程和,检查点例程 和的具体内容分别如下: 中断例程(见图 3): 如果检查点标志在置位状态,并且调用线程的执行位置标志在复位状态, 则调用检查点例程; 应用线程检查点控制例程(见图 3): 置位调用线程的执行位置标志; 如果检查点标志在置位状态,则调用检查点例程; 应用线程检查点控制例程(见图 3): 如果检查点标志在置位状态,则调用检查点例程; 复位调用线程的执行位置标志; 检查点例程(见图 3): 9 (1) 调用线程释放其持有的同步对象; (2)调用线程获取其线程上下文; (3)调用线程宣布其进入检查点就绪状态; (4)调用线程等待进程状态快照的完成; (5)调用线程恢复拥有其在(1)中释放的同步对象; (6)调用线程宣布其进入检查点完成状态; (7)调用线程等待恢复执行通知; 对 pthread_mutex_lock 之类的使线程进入等待态的同步系统 API 截获,其 检查点例程(见图 3): (1) 调用线程释放刚才由此同步 API 返回而获得的同步对象; (2) 调用线程释放其已持有的同步对象; (3) 调用线程获取其线程上下文; (4) 调用线程宣布其进入检查点就绪状态 (5) 调用线程等待进程状态快照的完成; (6) 调用线程恢复拥有其在(2)中释放的同步对象; (7) 调用线程宣布其进入检查点完成状态; (8) 调用线程等待恢复执行通知; (9) 调用线程调用对应同步 API 重新进入等待状态; 对非同步 API 的截获,其检查点例程(见图 3)与上述检查点例程 相同。 具体实施方式具体实施方式 参照图 4。该实施例中:在检查点时刻,进程中有三个线程:T1, T2,T3,有 2 个同步对象:互斥 M1,M2。线程 T1 持有 M1,在执行态;线 程 T2 持有 M2,它调用了 10 pthread_mutex_lock()系统 API,在等待态,进一步等待 M1;线程 T3 调用 了 pthread_mutex_lock()系统 API 在等待态,等待 M2。 在检查点时刻,检 查点线程置位检查点标志,并调用 signal()给线程 T1,T2,T3 发送检查点 中断信号。T1,T2,T3 被中断,转去执行检查点中断例程。在检查点中断例 程(见图 3)中,T1 检查检查点标志在置位状态,并且自己的执行位置标 志在复位状态,于是调用检查点例程(见图 3) 。T1 在检查点例程中, 释放 M1,调用 sigsetjmp()系统 API 获取线程上下文,然后调用 barrier() 系统 API 等待进程检查点的完成。线程 T2 在检查点中断例程中,检查自己的 执行位置标志在置位状态,于是直接返回,继续保持等待状态。在线程 T1 释 放 M1 后,线程 T2 会被唤醒。当 T2 的执行前移至检查点控制代码(见图 3)时,发现检查点标志在置位状态,于是调用检查点例程(见图 3) 。 在检查点例程中, T2 先释放刚持有的 M1,然后释放自己持有的 M2,然 后调用 sigsetjmp()获取线程上下文,然后调用 barrier()等待进程检查点的完 成。T3 和 T2 一样,在 T2 释放 M2 之后,结束等待状态,在检查点例程中, 释放刚持有的 M2,然后调用 sigsetjmp()获取线程上下文,然后调用 barrier()等待进程检查点的完成。在所有应用线程(T1,T2,T3)都调用了 barrier()之后,检查点线程被唤醒,它知道所有应用线程都进入了检查点就 绪状态,于是捕获进程状态快照(包括所有应用线程栈中的数据,堆,全局数 据区,应用申请的内存数据块,以及所有虚拟内核对象,各应用线程的线程上 下文)并保存到可靠存储体上。做完进程状态快照之后,检查点线程调用 barrier()恢复线程 T1,T2,T3 的执行。线程 T1 恢复对 M1 的持有后,调用 barrier()进入同步状态。线程 T2 恢复对 M2 的持有后,也调用 barrier() 进入同步状态。在所有应用线程都恢复持有其同步对象之后,她们同步恢复执 11 行。线程 T1 继续执行,线程 T2 调用 pthread_mutex_lock( )系统 API 重新等待 M1, 线程 T3 调用 pthread_mutex_lock( )系统 API 重新等待 M2。所有线程都复 原到检查点之前的状态。 图 5 为进程基于上述检查点的恢复执行时序过程。在进程恢复时,程序以 恢复方式重新启动。主线程 T1 在检查点初始化中完成截获系统 API 和创建检 查点线程后,读取要恢复的检查点,执行恢复例程。 在恢复例程中,主线程基于检查点信息恢复所有虚拟内核对象,创建同步 对象(互斥 M1 和 M2) ,然后以线程上下文所在内存地址为传递参数创建子 线程 T2 和 T3。子线程入口函数不是原有线程函数,而是一个只包含调用 siglongjmp( )系统 API 语句的函数。被创建的子线程一启动就使用传递参数并 调用 siglongjmp( )恢复其线程上下文。T2 和 T3 上下文被恢复后,在检查点例 程(见图 3)中接着执行 barrier()进入同步状态,等待恢复完成。 主线程从检查点中读取自己栈指针值,然后调用一递归函数来减小自己栈 指针,在递归函数中,通过检查递归函数中的局部变量的内存地址来判断栈指 针是否小于检查点中保存的栈指针值。如果小于,则说明自己的栈已经比检查 点中的栈大,足以包容检查点中的栈数据。主线程基于检查点信息,恢复所有 进程状态(包括自己线程栈数据(从保存的栈指针至栈底这段内存中的数据) , 子线程栈数据,堆,全局变量,以及应用程序使用的内存数据块) 。然后调用 siglongjmp( )恢复自己线程上下文。主线程上下文被恢复后,在检查点例程 (见图 3)中接着执行 barrier() ,进入同步状态,等待恢复。 一旦所有线程都调用 barrier()后,他们便同步继续执行。它们执行检查 点过程的第三阶段。主线程 T1 恢复对 M1 的持有,T2 恢复对 M2 的持有。在 持有关系全部恢复之后,它们同步恢复执行。T1 恢复正常执行,T2 和 T3 调 12 用 pthread_mutex_lock( )系统 API 重新进入等待状态。进程状态恢复完毕。 1 说说 明明 书书 附附 图图 图图 1 1 图图 2 2 用户空间状态 内核空间状态 对象 1 对象 n 引用 1 对象 i 引用 i 引用 n 用户空间状态 内核空间状态 对象 1 对象 n 虚拟引用 1 对象 i 虚拟引用 i 虚拟引用 n 虚拟 对象 1 虚拟 对象 i 虚拟 引用 n API API 虚拟 API 检查点时刻状态 故障恢复后时状态 线程检查点 APIAPI代码代码 应用代码应用代码 内核代码内核代码 内核对象状态跟踪记录与对象引用映内核对象状态跟踪记录与对象引用映 射代码射代码 线程检查点 h=1 p=2 h=3 p=5 h=1 p=5 h=1 p=5 2 图图 3 系统API层 应用层 内核对象 内核对象状态跟踪记录与对象引用映射层 应用线程检查点控制层 中断点 检查点层 中断例程 执行代码流执行代码流 内核层原子方式执行 3 图图 4 应用线程 T3 时间 t 应用线程 T1 应用线程 T2 检查点线程 设置检查点标志 持有 M1 运行 持有 M2; 调用了 pthread_mutex_lock (M1)等待 M1; 被中断, 执行中断例程, 发现执行位置标志 在复位状态, 于是 调用检查点例程 ,释放 M1; 调用了 pthread_mutex_lock (M2)等待 M2; 发送检查点信号 被中断, 执行中断例程, 发现执行位置标志在 置位状态, 于是返回; 继续等待; 被中断, 执行中断例程, 发现执行位置标志在 置位状态, 于是返回; 继续等待; 调用sigsetjmp( ) 获取线程上下文; 调用Barrier( ) 同步; 因 T1 释放

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论