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.