コードを修正しようとしています。デッドロックと相互排除の問題を解決しましたが、promela (PML) にはモニターがないため、飢餓を回避する方法がわかりません。誰かが私を助けることができますか?前もって感謝します
bool forchetta0 = false,forchetta1 = false, forchetta2 = false,
forchetta3 = false, forchetta4 = false;
bool want0 = false, want1 = false, want2 = false, want3 = false, want4 = false;
active[5] proctype filosofo(){
printf("Filosofo %d -> sto pensando\n",_pid);
ciclo:
if
::true -> printf("Filosofo %d -> PENSO \n",_pid);
::true -> printf("Fisolofo %d -> voglio mangiare\n",_pid);
if
::_pid == 0 -> atomic{(!want4 &&!want1);want0 = true;}
forchetta0 = true; forchetta4 = true;
printf("Filosofo 0 -> STO MANGIANDO\n");
forchetta0 = false; forchetta4 = false;
want0 = false;
printf("Filosofo 0 -> HO FINITO DI MANGIARE\n");
::_pid == 1 -> atomic{(!want0 &&!want2);want1 = true;}
forchetta0 = true; forchetta1 = true;
printf("Filosofo 1 -> STO MANGIANDO\n");
forchetta0 = false; forchetta1 = false;
want1 = false;
printf("Filosofo 1 -> HO FINITO DI MANGIARE\n");
::_pid == 2 -> atomic{(!want1 &&!want3);want2 = true;}
forchetta1 = true; forchetta2 = true;
printf("Filosofo 2 -> STO MANGIANDO\n");
forchetta1 = false; forchetta2 = false;
want2 = false;
printf("Filosofo 2 -> HO FINITO DI MANGIARE\n");
::_pid == 3 -> atomic{(!want2&&!want4);want3= true;}
forchetta3 = true; forchetta2= true;
printf("Filosofo 3 -> STO MANGIANDO\n");
forchetta3 = false; forchetta2= false;
want3 = false;
printf("Filosofo 3 -> HO FINITO DI MANGIARE\n");
::_pid == 4 -> atomic{(!want0 &&!want3);want4= true;}
forchetta4 = true; forchetta3= true;
printf("Filosofo 4 -> STO MANGIANDO\n");
forchetta4 = false; forchetta3= false;
want4 = false;
printf("Filosofo 4 -> HO FINITO DI MANGIARE\n");
fi;
fi;
goto ciclo;
}