Я пытаюсь смоделировать, что два моих процесса, которые выполняются на двух разных процессорах, входят в критическую секцию. Когда инструкция обоих процессов становится «CS», я хотел бы отправить один из них в заблокированную очередь. Однако, даже если я задаю последовательность инструкций двух процессов одинаково, и пока они работают в разных процессорах параллельно, они оба входят в критическую секцию в моем коде моделирования. Не могли бы вы проанализировать мой код и сказать мне, что я делаю неправильно?
void execute(CPU *cpu)
{
fetch(cpu);
while(cpu->instruction=="NI") {
//printf("instruction : %s, instructionNo: %d, totalExecution in cpu:%d \n", cpu->instruction, cpu->instructionNo, cpu->totalExecuted);
Sleep(1000);
fetch(cpu);
}
if(cpu->instruction=="CS"){
printf("process %d instruction no: %d",((PCB*) ((cpu->runningProcess)->dataPtr))->processID, cpu->instructionNo);
WaitForSingleObject(csMutex, INFINITE);
if(csBoolean==FALSE) {
csBoolean==TRUE;
}
else if(csBoolean==TRUE) {
printf("process %d suspended.",((PCB*) ((cpu->runningProcess)->dataPtr))->processID);
ReleaseMutex(csMutex);
contextSwitch(cpu);
return;
}
ReleaseMutex(csMutex);
printf("process %d entered its critical section.\n",((PCB*) ((cpu->runningProcess)->dataPtr))->processID);
Sleep(3000);
WaitForSingleObject(csMutex, INFINITE);
csBoolean=FALSE;
ReleaseMutex(csMutex);
((PCB*)((cpu->runningProcess)->dataPtr))->instructionNo = cpu->instructionNo;
}
else if(cpu->instruction!="NI"){
contextSwitch(cpu);
}
}