zoukankan      html  css  js  c++  java
  • 第十六讲 任务优先级

     本讲就是利用上一讲的位图功能,用优先级对任务进行管理

    typedef struct _tTask {
        tTaskStack * stack;
        uint32_t delayTicks;
        uint32_t prio;        //task结构体中增加优先级
    }tTask;
    
    //首先需要在task创建中增加如下
    {
        task->prio = prio;
        
        taskTable[prio] = task; //这个表格是一个task结构体指针数组,利用这个表格调用task
        tBitmapSet(&taskPrioBitmap, prio); //在相应的位图中置1
    }
    //这个函数用来获取目前最高优先级的ready task
    tTask * tTaskHighestReady (void)
    {
        uint32_t highestPrio = tBitmapGetFirstSet(&taskPrioBitmap);
        return taskTable[highestPrio];
    }
    //在任务调度器中调用tTaskHighestReady 函数,如果current task不是最高优先级
    //就把next task置位最高优先级,然后切换
    void tTaskSched ()
    
    //在tTaskDelay中,需要把调用tBitmapClear(&taskPrioBitmap, currentTask->prio);
    //因为此时这个task已经不是ready 状态了,这个时候已经有了一些任务状态的概念了。
    tTaskDelay()
    
    //这个函数中,原本是用来扫描每个任务的delayTicks值,如果为0,那么就要调用
    //tBitmapSet,将相应位置1,重新ready了。
    void tTaskSystemTickHandler ()
  • 相关阅读:
    nignx的master进程和worker进程的作用
    JVM运行机制
    ElasticSearch介绍与安装
    Maven打可执行包的pom.xml配置
    pg按日,周,月进行数据统计
    数据库中重复数据查询和删除
    聚类算法的评估应面向具体问题
    将博客搬至CSDN
    Mutual Information
    层次化聚类
  • 原文地址:https://www.cnblogs.com/nasduc/p/8505086.html
Copyright © 2011-2022 走看看