我正在做一个班级项目。我需要设计一个 cpu、一个 lts(长期调度程序)和一个调度程序。cpu和lts是线程,它们操作同一个线程安全的链表(也就是说链表上的所有操作必须互斥)。cpu由三个组成部分。(启动:它在执行开始时只工作一次并得到就绪队列中的第一项。获取:它将从正在运行的进程的代码段中获取第[IP]条指令到IR。执行它将执行IR中的指令)。Lts 在创建时间为时将假设进程放入就绪队列。创建时间是在创建进程之前执行的总指令数。
DWORD WINAPI cpuFunction(){
boot();
while(cpu.runningProcess != NULL){
WaitForSingleObject(readyQueue->mutex, INFINITE);
fetch();
exec();
ReleaseMutex(readyQueue->mutex);
}
return (DWORD) 0;
}
DWORD WINAPI ltsFunction(){
processList =createProcessList(FILE_NAME);
readyQueue = createList();
while(1){
WaitForSingleObject(readyQueue->mutex, INFINITE);
if(processList != NULL){
nextProcess = getFromList(processList,0);
if(nextProcess->processCreationTime == cpu.executedInstructionCount){
nextProcess = removeFromList(processList,0);
addToList(readyQueue, nextProcess);
printf("Process %d is in the ready queue.\n",nextProcess->processID);
} else{
nextProcess = NULL;
}
}
ReleaseMutex(readyQueue->mutex);
}
Sleep(500);
}
在我的代码中,我想做的是在每个执行步骤之后,必须解锁 cpu 函数中的互斥锁,并且 lts 应该检查它是否是下一个进程的创建时间。这就是我使用互斥锁的原因。但问题是它们不起作用。首先 lts 将第一个进程放入就绪队列(其创建时间为 0),然后 cpu 开始运行,但它不会停止,直到第一个进程终止。但是,在执行指令后,必须将第二个进程放入就绪队列中。我不知道我该如何解决,我真的需要帮助。