我有一个我需要实现的功能。 线程使用这些参数调用此函数。它应该以正确的时间返回它访问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);
答案 0 :(得分:2)
您的帖子使用伪代码,并且存在一些含糊之处,所以如果我在这里做出错误的假设,请评论:
如何实现等待并正确同步 [?]
等待 ,
线程中的等待通常以不阻塞其他线程的方式实现。线程工作者函数底部的 Sleep() 允许被调用线程休眠一段时间,即与其他进程共享时间。在Windows中,它的原型为:
VOID WINAPI Sleep(
_In_ DWORD dwMilliseconds
);
<强> 同步 强>:
可以通过多种方式完成。假设您指的是保持调用从多个线程进入的顺序,您可以创建一个简单的结构,该结构可以作为参数传回,该参数可以包含是否访问uP的TRUE / FALSE指示,以及时间尝试了:
在someheader.h文件中:
typedef struct {
int uPAccess;
time_t time;
}UP_CALL;
extern UP_CALL uPCall,* pUPCall;
在所有.c文件中,您将使用:
#include "someheader.h"
在其中一个.c文件中,您必须初始化结构:也许在 主要成果:
int main(void)
{
pUPCall = &uPCall;
//other code
return 0;
}
现在,您可以在线程工作器函数中包含指向struct的指针(通常,全局变量存在线程之间的访问争用风险,但您使用mutex
进行保护),以获取访问尝试的时间,并且成功尝试