繁体   English   中英

在C中实现MLFQ(多级反馈队列)的最佳方法是什么?

[英]What is the best way to implement a MLFQ (Multi-level feedback queue) in C?

我有一个需要实现的函数。 线程使用这些参数调用此函数。 应该以正确的时间返回它访问CPU的时间,如果无法访问CPU,它将等待直到可以访问它。

关于正确的时间,我保留一个全局变量,每次调用它都会更新。

如何实现等待并正确同步它。

int MLFQ(float currentTime, int tid, int remainingTime, int tprio)

到目前为止,我的代码看起来像这样,但效果不佳。

update globalTime (globalTime = currentTime)
Mutex_lock
Add to MLFQ if needed (either to 5, 10, 15, 20, or 25 MLFQ)
if (canAccessCPU)
    getCPU
    unlock mutex
    return globalTime
else
    mutex_unlock
    return MLFQ(globalTime, tid, remainingTime, tprio);

您的帖子使用伪代码,并且存在一些歧义,因此,如果我在这里做出错误的假设,请发表评论:

如何实现等待并正确同步 [[]

等一下

线程中的等待通常以不阻塞其他线程的方式实现。 线程工作器函数底部的Sleep()允许一些时间使被调用线程进入睡眠状态,即与其他进程共享时间。 在Windows中,其原型为:

VOID WINAPI Sleep(
  _In_  DWORD dwMilliseconds
);  

Linux sleep()在这里

同步中
可以通过多种方式完成。 假设您指的是保持几个线程中调用的顺序,则可以创建一个简单的结构,该结构可以作为参数传递回去,该参数可以包含TRUE / FALSE指示是否访问了uP,以及访问uP的时间。尝试了:

在someheader.h文件中:

typedef struct  {
    int uPAccess;
    time_t time;
}UP_CALL;

外部UP_CALL uPCall,* pUPCall;

在所有.c文件中,您将使用:

#include "someheader.h" 

在.c文件之一中,您必须初始化struct:也许是在主要功能上:

int main(void)
{
    pUPCall = &uPCall;
    //other code  
    return 0;
} 

现在,您可以在线程工作器函数中包含指向struct的指针(通常全局变量有线程间访问争用的风险,但是您可以使用mutex进行保护),以获得访问尝试的时间以及尝试成功的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM