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