簡體   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