Hallo zusammen,
hab folgende Aufgabe (ist rein Theoretisch):
Ich dachte hier an folgende Semaphoren:
RampenSemaphore(1) => Dieser Semaphore soll gewerleisten das immer nur ein Process die Rampe erhält
TassenSemaphore(0) => Dieser Semaphore soll signalisieren das es Tassen gibt
KaffeesackSemaphore(0) => wie TassenS.
MaxSemaphore(20) => Dieser Semaphore soll die Kapazität simulieren.
Füge in den aufgelisteten Pseudocode des Ablaufs der beteiligten Prozesse an entsprechenden Stellen den Aufruf der Semaphore da:
Mein Problem ist das ich das ganze mit der Kapazität nicht hin bekomme.
Bei mir würde der Process Lieferant wie folgt aussehen:
Das sieht sehr merkwürdig aus (es sieht Falsch aus!) und deswegen bin ich mir total unsicher.
Vermutlich benötigt man mehr Semaphore?
Kann mir hierbei jemand Helfen?
hab folgende Aufgabe (ist rein Theoretisch):
Folgende Bedingungen müssen erfüllt werden:Ein Händler hat ein Lager für Kaffeesäcke und Tassen.
Beliefert wird er von einem Lieferant, der bei jeder Lieferung eine Tasse und ein Kaffeesack bringt.
Ein Ausfahrer A1 bringt je Fahrt eine Tasse zum Kunden, ein Ausfahrer A2 je Fahrt einen Kaffeesack.
Zum Be- und Entladen muss eine Laderampe benutzt werden.
- Zur Rampe kann jeweils nur ein Prozess (Lieferant, A1, A2) fahren
- A1 darf nur zur Rampe fahren, wenn noch eine Tasse im Lager ist. Analog zu A2.
- Das Lager hat eine beschränkte Kapazität, es kann höchstens 20 Stück aufnehmen
- Der Lieferant darf nur zur Rampe fahren, wenn er seine Lieferung vollständig abladen kann
- Zu Beginn sei das Lager leer und die Rampe frei
Ich dachte hier an folgende Semaphoren:
RampenSemaphore(1) => Dieser Semaphore soll gewerleisten das immer nur ein Process die Rampe erhält
TassenSemaphore(0) => Dieser Semaphore soll signalisieren das es Tassen gibt
KaffeesackSemaphore(0) => wie TassenS.
MaxSemaphore(20) => Dieser Semaphore soll die Kapazität simulieren.
Füge in den aufgelisteten Pseudocode des Ablaufs der beteiligten Prozesse an entsprechenden Stellen den Aufruf der Semaphore da:
Code:
Process Lieferant { Process A1 { Process A2 {
while(true) { while(true) { while(true) {
<zur Rampe fahren>; <zur Rampe fahren>; <zur Rampe fahren>;
<1 Tasse entladen>; <1 Tasse aufladen>; <1 Kaffesack aufladen>;
<1 Kaffeesack entladen>; <Rampe verlassen>; <Rampe verlassen>;
<Rampe verlassen>; } }
} } }
}
Mein Problem ist das ich das ganze mit der Kapazität nicht hin bekomme.
Bei mir würde der Process Lieferant wie folgt aussehen:
Code:
Process Lieferant {
while(true) {
MaxSemaphore.P(2); //Hier kommen 2 Exemplare ins Lager (Lager ist am Anfang leer)
TassenSemaphore.V(); //Hier wird jetzt eine Tassen Objekt ins Lager gelegt
KaffeesackSemaphore.V(); //ebenfals wie oben
RampenSemaphore.P(); //Hier betritt nun der Lierferant die Rampe
<zur Rampe fahren>;
<1 Kaffeesack entladen>;
<1 Tasse entladen>;
<Rampe verlassen>;
RampenSemaphore.V();
}
}
Das sieht sehr merkwürdig aus (es sieht Falsch aus!) und deswegen bin ich mir total unsicher.
Vermutlich benötigt man mehr Semaphore?
Kann mir hierbei jemand Helfen?