TU Wien:Betriebssysteme VO (Puschner)/Prüfung 2010-04-28 (und 2009-04-29) - Beispiel 01
Zur Navigation springen
Zur Suche springen
Mein Lösungsvorschlag:
Init: initS(M1_writable, 1); initS(M2_writable, 1); daten: array[0..1] of boolean; P1: do forever(){ P(M1_writable); write_mem1(); daten[0] = true; } P2: do forever(){ P(M2_writable); write_mem2(); daten[1] = true; } Ausgabeprozess: do forever(){ if(daten[0]){ read_mem1(); daten[0] = false; V(M1_writable); } if(daten[1]){ read_mem2(); daten[1] = false; V(M2_writable); } }
28.12.2016 MSZ:
Achtung.. Busy Waiting bei Ausgabeprozess. Hier wird ständig auf daten[0] und daten[1] überprüft. Das muss unbedingt vermieden werden. Hier einen Semaphor davor schalten - siehe untere Lösung.
andere Lösung[Bearbeiten | Quelltext bearbeiten]
Init: initS(IN1, 1); initS(IN2, 1); initS(OUT, 0); initS(Mutex, 1); daten: array[0..1] of boolean; P1: do forever(){ P(IN1); write_mem1(); daten[0] = true; V(OUT) } P2: do forever(){ P(IN2); write_mem2(); daten[1] = true; V(OUT) } Ausgabeprozess: do forever(){ P(OUT) P(Mutex) if(daten[0]){ read_mem1(); daten[0] = false; V(M1_writable); } if(daten[1]){ read_mem2(); daten[1] = false; V(M2_writable); } V(Mutex) }
28.12.2016 MSZ:
Der Mutex Semaphor ist hier nicht notwendig.