nachos线程优先级控制

1.在thread.h中添加priority属性和set,get方法
private:    int priority;            //priority of thread

pubclic:
    int getPriority(){return priority;}
    void setPriority(int p)
    {
    if(p > PRIORITY_MAX) priority = PRIORITY_MAX;
    else if(p < PRIORITY_MIN) priority = PRIORITY_MIN;
    priority = p;
    }

2.在thread.cc中修改Thread.Yield()方法
 
   if (nextThread != NULL) {                    //如果下一个线程不为空
    if(nextThread->getPriority() > this->getPriority())    //如果下一个线程优先级比当前线程低,继续运行当前线程
        scheduler->ReadyToRun(nextThread);            
    else                            //否则
    {
        scheduler->ReadyToRun(this);            //将该线程的状态设置为就绪状态
        scheduler->Run(nextThread);                //调度器运行下一个线程
    }
    }


3.修改scheduler.cc中的ReadyToRun()方法
    readyList->SortedInsert((void *)thread,thread->getPriority());
    //readyList->Append((void *)thread);        //假如就绪队列

4.修改测试文件

void
PrintPriority(int tid)
{
  for(int i=0;i!=3;i++)
  {
  printf("*** tid:%d looped %d times, priority:%d\n",tid,i,currentThread->getPriority());
  currentThread->Yield();
  }
}
void
TestPriority()
{
  for(int i = 6; i!=0;i--)
  {
  Thread* t = Thread::getInstance("thread");
  t->setPriority(i);
  if(t!=NULL)
      t->Fork(PrintPriority,t->getTid());
  }
}

测试结果如图:


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值