Nicht angemeldet. · Kennwort vergessen · Registrieren

misc
Mitglied seit 07/2011
13 Beiträge
Betreff: condition variable
Hi!
Hat irgendwer die Folien zum Thema Condition Variables kapiert? Mutex und Semaphore check ich noch, aber was genau eine Condition Variable ist... da werd ich nicht schlau aus den Folien.
Wäre cool wenn mir jemand helfen könnte!
Michael
sicherha
Informatik-Veteran
Mitglied seit 10/2010
53 Beiträge
Das Konzept der Condition-Variable ist die Lösung für das Problem, dass man sein Programm innerhalb eines kritischen Abschnitts (→ wenn man einen Mutex gesperrt hält) schlafen legen und auf ein Ereignis warten lassen will. Solange man schläft, muss der Mutex freigegeben sein, denn sonst kann der Thread, der das Ereignis "produzieren" soll, nicht seinen eigenen kritischen Abschnitt betreten - wir hätten also einen Deadlock.

So eine Warteschleife würde in Pseudocode also in etwa so aussehen:
  1. lock(m);
  2. while (event == 0) {
  3.     unlock(m);
  4.     sleep();
  5.     lock(m);
  6. }
  7. unlock(m);
Vom Grundprinzip her funktioniert das sehr ähnlich wie die Standard-Warteschleife™, mit der man auf Ereignisse wartet, die durch einen Interrupt signalisiert werden.

Um das Lost-Wakeup-Problem zu vermeiden, gibt es noch eine Grundvoraussetzung zu beachten: Das Freigeben des Mutex und das Einschlafen müssen atomar erfolgen. Hier kommt die wait-Operation der Condition-Variable ins Spiel: Sie gibt in einem atomaren Schritt den Mutex frei, legt den Thread schlafen und belegt nach dem Aufwachen den Mutex erneut.

Das Aufwecken erledigt der andere Thread explizit dadurch, dass er die broadcast-Operation durchführt.
(Zum Vergleich: Bei Interrupts erfolgt das Aufwecken immer implizit durch das Eintreten der Programmunterbrechung.)
misc
Mitglied seit 07/2011
13 Beiträge
super erklärt, danke =)
Schließen Kleiner – Größer + Auf diesen Beitrag antworten:
Prüfcode: VeriCode Gib bitte das Wort aus dem Bild ins folgende Textfeld ein. (Nur die Buchstaben eingeben, Kleinschreibung ist in Ordnung.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Weitere Zeichen:
Gehe zu Forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen