题目二:处理机调度—实时调度算法EDF和RMS

合集下载

处理机调度-调度算法

处理机调度-调度算法

处理机调度-调度算法处理机调度-调度算法先来先服务(FCFS)调度算法概念将⽤户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,按照先来先服务的⽅式进⾏调度处理。

公平性1.直观看,该算法在⼀般意义下是公平的。

即每个作业或进程都按照它们在队列中等待时间长短决定它们是否优先享受服务2.但如果执⾏时间较短的作业或进程在某些执⾏时间很长的作业或进程之后到达,则它们将等待很长时间轮转法基本思路基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成⽐例过程将CPU的处理时间分成固定⼤⼩的时间⽚。

如果⼀个进程在被调度选中之后⽤完了系统规定的时间⽚,但未完成要求的任务,则它⾃⾏释放⾃⼰所占有的CPU⽽排到就绪队列的末尾,等待下⼀次调度。

同时,进程调度程序⼜去调度当前就绪队列中的第⼀个进程或作业。

轮转法只能调度可抢占资源轮转法只能⽤来调度分配那些可以抢占的资源。

将它们随时剥夺再分配给别的进程例⼦:CPU是可抢占资源的⼀种但如打印机等资源是不可抢占的作业调度不使⽤轮转法:由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使⽤轮转法轮转法的时间⽚选取问题时间⽚长度的选择会直接影响系统开销和响应时间过短的问题:如果时间⽚长度过短,则调度程序剥夺处理机的次数增多。

这将使进程上下⽂切换次数也⼤⼤增加,从⽽加重系统开销过长的问题:如果时间⽚长度选择过长,例如⼀个时间⽚能保证就绪队列中所需执⾏时间最长的进程能执⾏完毕,则轮转法变成了先来先服务法由于时间⽚的选取要满⾜相应时间的要求,所以是有如下的关系:q=R/NmaxR:系统对响应时间的要求RNmax:就绪队列中所允许的最⼤进程数Nmax相应的关系:1.在q为常数的情况下,如果就绪队列中的进程数远⼩于Nmax,则响应时间R看上去会⼤⼤减⼩2.由于q值固定,从⽽进程上下⽂切换的时机不变,系统开销也不变。

3.CPU的整个执⾏时间等于各进程执⾏时间加上系统开销。

EDF调度算法

EDF调度算法

2 1)
Page 9
一、引入 2、国内外研究概况
当然,RM是基于这样一种比较理想的硬实时周期任务模型: i. 所有的任务都是周期任务 ii. 所有的任务都是不相关的,即它们没有共享资源 iii.所有任务都有一个固定的执行时间或最大执行时间 iv.所有任务的相对截止时间 都等于它们的周期 v. 所有任务都是可抢占的 vi.系统只有一个处理器 注:若iv不成立,则RM不是最优的固定优先级调度算法。这 事可采用另一种算法:时限单调(deadline monotonic)调度算 法DM,其按任务的相对时限来分配优先级:相对时限越短, 优先级越高。
Page 12
一、引入 2、国内外研究概况
软实时任务和偶发任务的调度 因为软实时任务允许运行时间错过截止期,所以其调度目标 是在保证满足硬实时周期任务的时限前提下,提高软实时任 务的响应时间。目前主要的调度算法有:
i. 后台运行法
ii. 轮询服务器法 iii. 挪用法
Page 13
一、引入 2、国内外研究概况
Page 11
一、引入 2、国内外研究概况
还有其他的动态优先级调度算法,e.g 最小空闲时间优先 (Least Slack Time First,LST)算法。
一个任务在t时刻的空闲时间等于: 截止时刻- t -该任务的剩余执行时间
虽然LST也是具有最优性ቤተ መጻሕፍቲ ባይዱ但需随时监视所有就绪任务,运行 时的开销较大,且如果两个任务的空闲时间接近,很容易产生 调度的颠簸现象,所以实际使用中一般不适用。
Page 5
一、引入 1、背景、目的及意义
从实时系统理论的发展来看,主要有以下几个方面: 有资源互斥的硬实时任务调度: 提出几种资源互斥协议来防止优先级反转和死锁问题, 并给出相应的可调度判定条件。 多处理器实时任务调度,前面的研究都是假定系统中只有 一个处理器,忽略实际复杂的因素,将注意力集中到调度算 法、资源访问控制和可调度性分析判定的基本原理上。这部 分将这些理论应用于包含多个处理器的实时系统中,并处理 在单处理器系统中未出现的问题。

处理机调度——实时调度

处理机调度——实时调度

实验二处理机调度——实时调度算法EDF和RMS1.实验目的:深入理解处理机调度算法,了解硬实时概念,掌握周期性实时任务调度算法EDF(Earliest Deadiest First)和RMS (Rate-MonotonicScheduling)的可调度条件,并能在可调度情况下给出具体调度结果。

2.实验过程在克调度的情况下,创建一组用户级线程。

3.实验内容#include <windows.h>#include <iostream>const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度unsigned short ProductID = 0; //产品号unsigned short ConsumeID = 0; //将被消耗的产品号unsigned short in = 0; //产品进缓冲区时的缓冲区下标unsigned short out = 0; //产品出缓冲区时的缓冲区下标int g_buffer[SIZE_OF_BUFFER]; //缓冲区是个循环队列bool g_continue = true; //控制程序结束HANDLE g_hMutex; //用于线程间的互斥HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待DWORD WINAPI Producer(LPVOID); //生产者线程DWORD WINAPI Consumer(LPVOID); //消费者线程int main(){g_hMutex = CreateMutex(NULL,FALSE,NULL);//函数功能:建立互斥体,用来同步。

如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。

//互斥体的好处是可以在进程间共享//函数原形://HANDLE CreateMutex(// LPSECURITY_ATTRIBUTES lpMutexAttributes,// BOOL bInitialOwner,// LPCTSTR lpName// );//参数说明://lpMutexAttributes:// 指向一个SECURITY_ATTRIBUTES结构的指针,这个结构决定互斥体句柄是否被子进程继承。

实时调度算法

实时调度算法
▪ 4 立即抢占的优先级调度算法:这种算法适用于实时要 求比较严格的实时控制系统。
▪ (4) 代表性的实时调度算法:
▪ 1 时限式调度法(deadline scheduling):是一 种以满足用户要求时限为调度原则的算法。有 周期性调度和非周期性调度。时限有:处理开 始时限(开始截止时间)和处理结束时限(完 成截止时间)两种,在实际中可以使用任一种 时限。
▪ ⑴ 实现实时调度的基本条件:
▪ 1提供必要的调度信息,如就绪时间、开 始截止时间和完成截止时间、处理时间、 资源要求、优先级;
▪ 2系统处理能力强 ▪ 3调度方式,广泛采用抢占调度方式,特
别是在实时要求严格的实时系统;
▪ 4很快的进程和线程切换速度。
▪ ⑵实时调度算法(请同学们看书上P99)
▪ 为了保证不遗漏任何一次截止时间,应采 用最早截止时间优先的剥夺策略。
2. 最低松弛度优先即LLF(Least Laxity First)算法
该算法是根据任务紧急(或松弛)的程度,来确定任务的优 先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈 高, 以使之优先执行。例如,一个任务在200ms时必须完成, 而它本身所需的运行时间就有100ms,因此,调度程序必须在 100 ms之前调度执行,该任务的紧急程度(松弛程度)为100 ms。 又如,另一任务在400 ms时必须完成,它本身需要运行 150 ms,则其松弛程度为 250 ms。在实现该算法时要求系统中有 一个按松弛度排序的实时任务就绪队列,松弛度最低的任务 排在队列最前面,调度程序总是选择就绪队列中的队首任务 执行。该算法主要用于可抢占调度方式中。假如在一个实时 系统中,有两个周期性实时任务A和B,任务A要求每 20 ms执 行一次,执行时间为 10 ms;任务B只要求每50 ms执行一次, 执行时间为 25 ms。

处理机调度算法详解

处理机调度算法详解

关于处理机调度算法《操作系统》教材中,介绍了常用的作业调度算法和进程调度算法。

其中先来先服务法(FCFS)和优先级法对作业调度和进程调度都适用,时间片轮转法(RR)适用于进程调度。

此外,还介绍了其他调度算法,如短作业优先法、最短剩余时间优先法、多级队列法和多级反馈队列法,这4个算法不是课程的重点内容,不作为考核要求。

需要指出的是:(1)在作业调度和进程调度中同时出现的算法,如FCFS、优先级法,其使用原理是基本相同的;(2)作业调度算法和进程调度算法应严格与存储管理中的“请求淘汰换页算法”相区别,注意不要混淆。

下面,结合具体的例题,详解调度算法:1. 先来先服务法(FCFS)算法描述:每次调度时,从后备作业队列或就绪队列中选择一个最先进入该队列的作业或进程。

【例1】下表给出作业l,2,3的到达时间和运行时间。

采用先来先服务调度算法,试问作业调度的次序和平均周转时间各为多少?(时间单位:小时,以十进制进行计算。

)分析解题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。

我们可以用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。

先来先服务调度算法是按照作业到达的先后次序挑选作业,先进入的作业优先被挑选。

即按照“排队买票”的办法,依次选择作业。

其作业执行时间图如下:或者简化为下图:作业1 作业2 作业3| | | | 时间0 8 12 13由于作业1,2,3是依次到来的,所以刚开始时系统中只有作业1,于是作业1被选中。

在8.0时刻,作业1运行完成,这时作业2和作业3已经到达,都在系统中等待调度,按照先来先服务法的规定,每次调度最先进入就绪队列中的作业,由于作业2比作业3先到达,于是作业2被优先选中运行。

待作业2运行完毕,最后运行作业3。

因此,作业调度的次序是1,2,3。

另外,要记住以下周转时间和平均周转时间的算术公式: 作业i 的周转时间T i =作业i 的完成时间-作业i 的提交时间系统中n 个作业的平均周转时间nT T ni i 1)(1⨯=∑=,其中Ti 为作业i 的周转时间。

RM和EDF算法原论文翻译

RM和EDF算法原论文翻译

RM和EDF算法原论文翻译RM和EDF——硬实时环境下多线程的调度算法摘要:单处理器的多线程调度问题的研究范围已经从它本身的特征拓展到程序运行的可靠性。

研究表明最佳固定优先级调度在大型任务序列集的情况下的最大调度利用率仅为70%。

此外,根据当前任务序列截止期动态分配优先级可以使调度率利用率等于1。

本文还讨论了将两种调度方法结合起来的算法。

1 引言近年来,运用计算机来控制和监测工业生产过程已得到广泛应用和不断扩展,并且在未来很可能得到更大的拓展。

此类应用的多数情况下,计算机由一定数目的时限监控程序和一批非时限任务流所共用。

然而,在其他的应用中,非时限作业不存在且计算机的有效利用只能通过谨慎调度时限监测程序来达到。

后者被称为“纯过程控制”且为本文呈现的组合调度分析提供了理论背景。

本文研究了此类程序设计中的两种调度算法,这两种均为可抢断优先级驱动算法,这意味着正在处理的任务可被任何高优先级任务中断。

第一个算法用一个固定优先级分配能使处理器利用率到达约70%甚至更大。

第二个算法通过动态分配优先级可以达到处理器的全利用。

此外,本文还讨论了两个算法的结合。

2 背景一个程序控制计算机执行一个或更多的监控程序。

追踪航天器运行轨迹的天线尖端就是此类监控程序的一个例子。

每个程序与一系列任务序列集相联且共同被执行。

此类任务中的一些任务是为了响应计算机监控的设备所发生的事件。

这些任务不能先于事件执行。

每个任务都必须在事件按要求释放后的固定时间内执行完毕。

在此时间段内的服务都需确保稳定性。

将运行环境分类为“硬实时”[1]是为了在可接受的响应时间统计分布上与“软实时”相对应。

多数现有多程序设计文献是针对商业分时系统的统计数据分析(文献[2]包含了详细的参考书目)。

也有文献针对更有意思的方面,比如调度批量处理设备或是混合批量分时设备,这些调度通常是在如文献[3]-[8]中多处理器配置环境下。

仅有少数论文直接讨论如何攻克“硬实时”程序设计的难关。

实时调度算法

实时调度算法

实时调度算法实时调度算法EDF实时调度算一、基本思想:在该实验中有两个周期性任务A、B,A的周期时间为20ms,每个周期的处理时间为10ms;任务B的周期时间为50ms,每个周期的`处理时间为25ms。

在t=0是,A1和B1同时到达,由于A1的截止时间比B1早,故调度A1执行;在t=10时,A1完成,又调度B1执行;在t=20时,A2到达,由于A2的截止时间比B2早,B1被中断而调度A2执行;在t=30时,A2完成,又重新调度B1执行;在t=40时,A3到达,但B1的截止时间要比A3早,仍执行B1,在t=45时,B1执行完,再调度A3执行;在t=55时,A3完成,调度B2执行。

该实验将最早截止时间优先算法用于抢占调度方式。

在该实验中,定义了两个开关来判断两个任务是中断还是调度执行。

二、源程序代码:#includeint main(){int A,B;int tA,tB,serveA,serveB; //进程的周期时间和处理时间float m;int i,j,a=0,b=0,ka=0,kb=0; //ka,kb为开关,i,j,a,b为进程下标int numa=0,numb=0; //处理累计时间printf("输入进程A的周期时间和处理时间:");scanf("%d%d",&tA,&serveA);printf("输入进程B的周期时间和处理时间:");scanf("%d%d",&tB,&serveB);m=(float)serveA/tA+(float)serveB/tB;for(int T=0;T<=100;T++){if(m-1>1e-6){printf("超出CPU的处理能力!\n"); return 0;}if(numa==serveA) //进程A完成{numa=serveA+1;printf("当T=%d时",T);printf("进程A%d完成\n",a);if(numb{printf(" 调度进程B%d\n",b);kb=1;}ka=0;}if(numb==serveB){numb=serveB+1;printf("当T=%d时",T);printf("进程B%d结束\n",b);if(numa{printf(" 调度进程A%d\n",a);ka=1;}kb=0;}if(T%tA==0 && T%tB==0){A=B=T;j=++a;i=++b;printf("当T=%d时,进程A%d和进程B%d同时到达,此时,",T,j,i); if(tA<=tB){printf("调度进程A%d,中断进程B%d\n",j,i);ka=1;kb=0;}else{printf("调度进程B%d,中断进程A%d\n",i,j);ka=0;kb=1;}numa=numb=0;}if(T%tA==0&&T%tB!=0){A=T;printf("当T=%d时",T);printf("进程A%d到达",++a); //不可能与进程A竞争处理器numa=0;if(numbif(B+tB>A+tA) //若进程B最早截止时间大于进程A的 {printf("进程A%d执行。

浅析RM与EDF实时调度算法

浅析RM与EDF实时调度算法

浅析RM与EDF实时调度算法1 引言与非实时系统相比,嵌入式实时系统因其所控制物理过程的动态性,要求运行于其中的单个任务必须满足其时限要求,以确保整个系统的正确性和安全性[1]。

在航空航天、电信、制造、国防等领域,对实时系统有着强烈的应用需求。

实时处理和实时系统的研究和应用工作已经有了相当长的历史,在实时任务调度理论、实时操作系统、实时通信等方面取得了大量成果。

实时任务调度理论是实时处理技术的核心和关键[2]。

这是因为,实时任务具有时限要求,在一个或多个处理器之间调度实时任务,需要判断是否每个任务的执行都能在其截止期限内完成。

如果每个任务的执行都能在其截止期限内完成,则称该调度是可行。

可调度性判定就是判定给定的n个实时任务在应用某种调度算法的前提下能否产生一个可行的调度。

调度算法的设计要尽可能满足任务可调度性的要求[3]。

2 实时调度分类由于实时系统的侧重点不同,实时调度亦有多种分类方式。

常见的分类有,根据任务实时性要求的重要程度,分为硬实时调度和软实时调度——在硬实时调度中任务必须在其截止期限内执行完毕,否则将产生严重后果。

而对于软实时任务,当系统负载过重的时候,允许发生错过截止期限的情况,根据任务是在一个或多个处理器上运行,分为单处理器实时调度和多处理器实时调度,多处理器实时调度又可分为集中式调度和分布式调度;根据调度算法和可调度性判定是在任务运行之前还是运行期间进行的,分为静态调度、动态调度和混合调度;根据被调度的任务是否可以互相抢占,分为抢占式调度和非抢占式调度;根据任务请求到达的情况不同。

分为周期性任务调度和非周期性任务调度。

不同调度方式具有各自的优缺点,适用于不同类型的实时系统。

3 RM与EDF调度算法简介1973年,Liu 和Layland 提出了一种适用于可抢占的硬实时周期性任务调度的静态优先级调度算法——速率单调(Rate Monotonic ,简称RM )调度算法,并对其可调度性判定问题进行了研究。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三.设计准备(理论、技术)
1.EDF算法和RMS算法的可调度条件及调度原则。
(1)EDF为可抢占式调度算法,其调度条件为:
sum(ci/ti)≤1
(2)RMS算法为不可抢先调度算法,其调度条件为:
sum(ci/ti)≤n(exp(in(2)/n)-1)
2.在linux环境中创建用户级线程的函数。
(1)创建用户级线程的库函数为:
五.设计结果并分析∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙12
六.系统的结构,原理框图和模块等的详细说明∙∙∙∙∙∙∙∙∙∙∙∙∙∙14
七.用户使用说明书和参考资料∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙15
{
pthread_mutex_init(& main_wait , NULL);
pthread_mutex_lock(& main_wait); //下次执行lock等待
pthread_mutex_init(& idle_wait , NULL);
pthread_mutex_lock(& idle_wait); //下次执行lock等待
for(i=0 ;i<task_num ;i++) //创建实时任务线程
pthread_create(&tasks[i].th, NULL, (void*)proc, &tasks[i].arg);
for(i=0;i<demo_time;i++)
{
int j;
if((curr_proc=select_proc(alg))!=-1)
}
};
void *idle()
{
while(1)
{
pthread_mutex_lock(&idle_wait); //等待被调度
printf("->"); //空耗一个时间单位
idle_num++;
pthread_mutex_unlock(&main_wait); //唤醒主线程
}
};
int select_proc(int alg)
八.设计体会∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙16
一.设计目的
深入理解处理机调度算法,了解硬实时概念,掌握最早截止期优先调度算法。EDF(Earliest Deadline First)和速率单调调度算法RMS(Rate Monotonic Scheduling)的可调度条件,并能在可调度情况下给出具体调度结果。
}task;
void proc(int *args);
void *idle();
int select_proc(int alg);
int task_num=0;
int idle_num=0;
int alg; //所选算法,1 for EDF,2 for RMS
int curr_proc=-1;
int demo_time=100; //演示时间
目录
一.设计目的∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙2
二.设计内容∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙2
pthread_create(&tasks[j].th,NULL,(void*)proc,&tasks[j].arg);
tasks[j].flag=2;
}
}
}
printf("\n");
sleep(10);
};
void proc(int *args)
{
while(tasks[*args].ci_left>0)
task *tasks;
pthread_mutex_t proc_wait[10]; //the biggest number of tasks
pthread_mutex_t main_wait,idle_wait;
float sum=0;
pthread_t idle_proc;
int main(int argc,char **argv)
}
}
}
}
return temp2; //return the selected thread or task number
};
五.设计结果并分析
6.系统的结构、原理框图和模块等的详细说明
最早截止期优先调度优先选择完成截止期最早的实时任务。对于新到达的实时任务,如果完成截止期先于正在运行任务的完成截止期,则重新分配处理器,即剥夺。
pthread_mutex_lock(&main_wait);
}
for(j=0;j<task_num;j++)
{ //Ti--,直至为0时开始下一周期
if(--tasks[j].ti_left==0)
{
tasks[j].ti_left=tasks[j].ti;
tasks[j].ci_left=tasks[j].ci;
scanf("%c,%d,%d,",&tasks[i].task_id,& tasks[i].ci,& tasks[i].ti);
tasks[i].ci_left=tasks[i].ci;
tasks[i].ti_left=tasks[i].ti;
tasks[i].flag=2;
tasks[i].arg=i;
tasks[*args].ci_left--; //执行一个时间单位
if(tasks[*args].ci_left==0)
{
printf("(%d)",tasks[*args].ci);
tasks[*args].flag=0;
tasks[*args].call_num++; //
}
pthread_mutex_unlock(&main_wait); //唤醒主线程
{ //按调度算法选择线程
pthread_mutex_unlock(&proc_wait[curr_proc]); //唤醒
pthread_mutex_lock(&main_wait); //主线程等待
}
else
{ //无可运行任务,选择闲逛线程
pthread_mutex_unlock(&idle_wait);
int call_num; //任务发生次数
int ci; //任务处理时间
int ti; //任务发生周期
int ci_left;
int ti_left; //record the reduction of ti \ci
int flag; //任务是否活跃,0否,2是
int arg; //参数
pthread_t th; //任务对应线程
int i;
for(i=0 ; i<源自ask_num ; i++)
{
pthread_mutex_init(& proc_wait[i] , NULL);
pthread_mutex_lock(& proc_wait[i]);
}
for(i=0;i<task_num;i++)
{
printf("Pleased input task id,followed by Ci and Ti:\n");
printf("Please input number of real time task:\n");
int c;
scanf("%d",& task_num); //任务数
tasks=(task *)malloc(task_num *sizeof(task));
while((c=getchar())!='\n'&& c!=EOF); //清屏
二.设计内容
在Linux环境中采用用户级线程模拟实现EDF和RMS两种实时调度算法。给定一组实时任务,按照EDF算法和RMS算法分别判断是否可调度。在可调度的情况下,创建一组用户级线程,分别代表各个实时任务,并按算法所确定的调度次序安排各个线程运行,运行时在终端上画出其Gantt图。为避免图形绘制冲淡算法,Gantt图可用字符表示。
tasks[i].call_num=1;
sum=sum+(float)tasks[i].ci / (float)tasks[i].ti;
while((c=getchar())!='\n'&&c!=EOF); //清屏
}
printf("Please input algorithm,1 for EDF,2 for RMS:");
{
switch(alg)
{
case 1: //EDF算法
if(temp1>tasks[j].ci_left)
{
temp1=tasks[j].ci_left;
temp2=j;
}
case 2: //RMS算法
if(temp1>tasks[j].ti)
{
temp1=tasks[j].ti;
temp2=j;
Int pthread_creat(pthread_t *THREAD,
相关文档
最新文档