[英]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.