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

在C中实现MLFQ(多级反馈队列)的最佳方法是什么?,c,multithreading,scheduling,C,Multithreading,Scheduling,我有一个像这样的函数,我需要实现它。 线程使用这些参数调用此函数。它应该在访问CPU的正确时间返回,如果它不能访问CPU,它将等待,直到它可以访问它 关于正确的时间,我保留了一个全局变量,它会在每次更新时调用它 如何实现等待并正确同步它 int MLFQ(float currentTime, int tid, int remainingTime, int tprio) 到目前为止,我的代码看起来像这样,但不太管用 update globalTime (globalTime = currentT

我有一个像这样的函数,我需要实现它。 线程使用这些参数调用此函数。它应该在访问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);

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

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

等待

线程中的等待通常以不阻塞其他线程的方式实现在线程工作者函数的底部,允许被调用线程有一段时间睡眠,即与其他进程共享时间。在Windows中,其原型为:

VOID WINAPI Sleep(
  _In_  DWORD dwMilliseconds
);  
这里

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

在someheader.h文件中:

外部调用调用uPCall,*pUPCall

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

在其中一个.c文件中,必须初始化结构:可能在 主要功能:

现在,您可以在线程工作者函数中包含一个指向struct的指针(通常全局线程有可能在线程之间发生访问争用,但您使用的是
互斥锁
),以获取访问尝试的时间和尝试的成功率

typedef struct  {
    int uPAccess;
    time_t time;
}UP_CALL;
#include "someheader.h" 
int main(void)
{
    pUPCall = &uPCall;
    //other code  
    return 0;
}