Willkommen! Einloggen Ein neues Profil erzeugen

erweitert

Nebenläufigkeit, Versuch 5

geschrieben von fitsum 
Nebenläufigkeit, Versuch 5
29.01.2021 12:34:23
Hallo zusammen,

ich habe den Versuch 5 untersucht und eine Sache ist mir nicht klar.
/* Prozess 0 */
while (1) {
flag[0] = true; turn = 1;
while ((flag[1] == true) && (turn == 1)) ;
/* do nothing */
/* kritischer Abschnitt */
flag[0] = false;
/* nichtkrit. Abschnitt */
}

/* Prozess 1 */
while (1) {
flag[1] = true;
turn = 0;
while ((flag[0] == true) && (turn == 0)) ;
/* do nothing */
/* kritischer Abschnitt */
flag[1] = false;
/* nichtkrit. Abschnitt */
}

Lass uns annehmen, Prozess 0 wird erstes durchgeführt and setzt flag[0] == true, turn = 1 und gibt CPU ab.
Prozess 1 setzt flag[1] == true und auf irgendein problem wird sie unterbrochen und kann nicht mehr laufen. Zum beispiel bie Anwendungen durch 'CLOSE' geschlossen.
Da es nur Prozess 0 aktive ist fürt die CPU sie durch.
Also weil flag[1] auf true gesetzt wird und Prozess 1 nicht mehr weiter machen kann, kann Deadlock passieren.
Ist meine Behauptung richtig oder ist so angenommen, dass solche Situationen nicht passieren dürfen?
Re: Nebenläufigkeit, Versuch 5
01.02.2021 12:31:30
Hallo,

das ist natürlich ein sehr spezieller Fall. Es muss natürlich schon irgendwie vom System garantiert werden, dass bei fehlerhaften Ausführungen und Abbrüchen einzelner Prozesse die gemeinsamen Flags wieder zurückgesetzt werden oder Ähnliches. Es sollte ja auch z.B. der belegte Speicher des Prozesses wieder freigegeben werden.


Kurz gesagt, diesen speziellen Fall den Sie hier ansprechen betrachten wir aus Einfachheit nicht, aber es sollte klar sein, dass das Betriebssystem erkennt wenn ein Prozess durch irgendein Problem beendet wird und den Prozess dementsprechend terminiert.

Viele Grüße
Sorry, in diesem Forum dürfen nur registrierte Benutzer schreiben.

Hier klicken, um sich einzuloggen