TU Wien:Betriebssysteme VO (Puschner)/Prüfung 2010-10-27 - Beispiel 01

Aus VoWi
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]);

Links[Bearbeiten | Quelltext bearbeiten]