cikidanomikidan
Newbie
- Registriert
- März 2022
- Beiträge
- 3
Hallo liebe Gemeinde,
ich habe folgendes Problem. Ich habe diesen Programmiercode gegeben:
Beide Prozesse versuchen zwei binäre Semaphore S1 und S2 zu bekommen. Die atomare Funktion testAquire() versucht, das Semaphore zu bekommen, falls es frei ist. Wenn ja, gibt s ein true zurück, wenn nein, ein false.
Dieser Code kann einen Livelock verursachen, aber ich weiß einfach nicht, wieso.
Grundsätzlich braucht P1 doch gar nicht S2, also muss gar nicht in die While-Schleife eintreten, um in den kritischen Abschnitt zu gelangen. Das selbe gilt für P2 anders rum. Also wie soll ein Livelock entsehen, bei dem der Prozesszustand READY oder RUNNING ist, ohne Fortschritt?
Hat jemand Rat?
ich habe folgendes Problem. Ich habe diesen Programmiercode gegeben:
Code:
Prozess P1
S1.acquire();
while (! S2.testAcquire()) {
S1.release();
sleep(1);
S1.acquire();
}
// kritischer Abschnitt
S2.release();
S1.release();
und
Prozess P2
S2.aqcuire();
while (! S1.testAcquire()) {
S2.release();
sleep(1);
S2.aqcuire();
}
// kritischer Abschnitt
S1.release();
S2.release();
Beide Prozesse versuchen zwei binäre Semaphore S1 und S2 zu bekommen. Die atomare Funktion testAquire() versucht, das Semaphore zu bekommen, falls es frei ist. Wenn ja, gibt s ein true zurück, wenn nein, ein false.
Dieser Code kann einen Livelock verursachen, aber ich weiß einfach nicht, wieso.
Grundsätzlich braucht P1 doch gar nicht S2, also muss gar nicht in die While-Schleife eintreten, um in den kritischen Abschnitt zu gelangen. Das selbe gilt für P2 anders rum. Also wie soll ein Livelock entsehen, bei dem der Prozesszustand READY oder RUNNING ist, ohne Fortschritt?
Hat jemand Rat?