Semaphoren richtig setzen in einer Theorie Aufgabe
Verfasst: Mi Aug 10, 2022 8:26 pm
Hallo zusammen,
hab folgende Aufgabe (ist rein Theoretisch):
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.
Folgende Bedingungen müssen erfüllt 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
Liste alle benötigen Semaphoren auf und erkläre ihren Zweck:
Ich dachte hier an folgende Semaphoren:
Füge in den aufgelisteten Pseudocode des Ablaufs der beteiligten Prozesse an entsprechenden Stellen den Aufruf der Semaphore da:
Mein erster Versuch mit diesen 4 Semaphoren wäre beim Lieferant folgender:
Doch mit diesem MaxSemaphore komme ich nicht weiter! Irgendwas stimmt nicht
Kann mir jemand weiterhelfen?
hab folgende Aufgabe (ist rein Theoretisch):
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.
Folgende Bedingungen müssen erfüllt 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
Liste alle benötigen Semaphoren auf und erkläre ihren Zweck:
Ich dachte hier an folgende Semaphoren:
Code: Alles auswählen
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.
Code: Alles auswählen
Process Lieferant {
while(true) {
<zur Rampe fahren>;
<1 Tasse entladen>;
<1 Kaffeesack entladen>;
<Rampe verlassen>;
}
}
Process A1 {
while(true) {
<zur Rampe fahren>;
<1 Tasse aufladen>;
<Rampe verlassen>;
}}
Process A2 {
while(true) {
<zur Rampe fahren>;
<1 Kaffesack aufladen>;
<Rampe verlassen>;
}}
Code: Alles auswählen
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();
}
}

Kann mir jemand weiterhelfen?