任务接口设计

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

*/

typedef struct {
    //该任务的 ID
    int id;
    //该任务依赖的任务的 ID
    int *child;
    //该任务依赖的任务个数
    int child_num;
} task;

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

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

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

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

借鉴:

方便管理数据使用结构体:

    typedef struct 
    {
        //该任务的 ID
        int id;
        //该任务依赖的任务的 ID
        int *child;
        //该任务依赖的任务个数
        int child_num;
    } task;

    结构体成员分析:
        id: 该任务的 ID:
                给任务编号,不至于产生很多的任务(也有相同任务,但是不是相同的),给任务编号,不至于产生很多的任务(也有相同任务,但是不是相同的),
                不知道是哪一个,提供编号,能够有效处理任务的唯一性

        child:因为任务id是唯一的,所以依赖的任务,就用id来指定
        child_num:依赖的数量

    这个结构体使用
        例如:
            #define N 10

            task *t = NULL;
            t->child_num = N;   //依赖的数量
            t->child = (int *)malloc(t->child_num * sizeof(int));

            t->child[0] = 1;    //要依赖的id
            ......


            free(t->child);     //释放资源
            free(t);

    函数分析:

        // 函数原型:
        bool doschedule(task *pask, int task_num);
            调度任务

            pask:使用指针,根据地址传递,减少系统开销
                不使用指针,而是使用 task pask, 会有副本机制,而且不能修改外部变量

            task_num:
                id号,任务id是唯一的,能够指定是哪个任务体
                    即使是相同的任务

            返回值:bool,判断执行的状态


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

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


        bool killtask(int id); //杀掉一个进程
            也是根据id号

不足:

bool 在c中没有,要单独定义,例如
    typedef int bool 

int waittask(int timeout);
    timeout 类型应该 long,

void dotask(int id); //执行一个进程
    返回值,应该有成功和失败
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值