TU Wien:Betriebssysteme VO (Puschner)/Prüfung 2010-10-27 - Beispiel 01
Zur Navigation springen
Zur Suche springen
Lösungsvorschlag 1[Bearbeiten | Quelltext bearbeiten]
Init:
initS(S, 1);
initS(V, 6);
initS(T1, 1);
initS(T2, 1);
Sp:
P(S);
get_form();
V(S); // Schalter während dem Ausfüllen des Formulars freigeben
fill_form();
P(S); // Schalter wieder blockieren, um das Formular abzugeben
id = submit_form();
V(S);
P(V);
enter_V();
room_id = 0;
while(room_id == 0){
prepare();
P(Anzeige)
update_Anzeige()
V(Anzeige)
room_id = check_board(id);
}
if (room_id == 1)
room = T1;
else if (room_id == 2)
room = T2;
P(room);
enter_T(room);
V(V);
fitness_test();
exit_T();
V(room);
andere Meinung:
P(Anzeige); update_anzeige(); V(Anzeige); hat in der while-Schleife bzw. in der ganzen Funktion nichts zu suchen! Man soll ja nur den Sportler synchronisieren.
Lösungsvorschlag 2[Bearbeiten | Quelltext bearbeiten]
// Initialisierung:
//-----------------
semaphore s, v, t[2];
initS(s, 1);
initS(v, 6);
initS(t[1], 1);
initS(t[2], 1);
//Code für SP:
//------------
// Formular holen, ausfuellen und abgeben
int id;
int board;
P(s);
get_form();
V(s);
fill_form();
P(s);
id = submit_form();
V(s);
//In Vorbereitungsraum Eintreten und vorbereiten
P(v);
enter_V();
do{
//Solange nichts auf der Anzeigetafel steht...
prepare();
P(Anzeige);
board = checkBoard(id);
V(Anzeige);
}while(board == 0)
// Betrete Raum 1|2 sobald frei.
P(t[board]);
enter_T(board);
// Verlasse Vorbereitungsraum
V(v);
fitness_test();
V(t[board]);