2

问答题 2 /49

用 C 语言写一个函数来执行一串任务。任务是互相依赖的。比如 B 任务依赖 A 任 务,则 A 完成 B 才能执行。不考虑并发限制,假设所有的任务都能一次执行成功, 所有的任务执行时间都相等。任务数据结构原型为:
typedef struct {
    //该任务的 ID
    int id;
    //该任务依赖的任务的 ID
    int *child;
    //该任务依赖的任务个数
    int child_num;
} task;

// 函数原型:
bool doschedule(task*pask,inttask_num);

//以下函数可以直接调用:
void dotask(int id); //执行一个进程

//等待 timeout 时间,并返回一个执行成功的任务的 id,如果没有任务在时间片内完成,则返回-1
int waittask(int timeout);

bool killtask(int id); //杀掉一个进程 

参考答案

1.通过拓扑排序来建立执行顺序.

2. 对于无关联的拓扑节点可以并发执行