![](/img/trans.png)
[英]What is the cleanest way to dereference multi-level pointers with offsets?
[英]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
);
同步中 :
可以通过多种方式完成。 假设您指的是保持几个线程中调用的顺序,则可以创建一个简单的结构,该结构可以作为参数传递回去,该参数可以包含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.