Semaphoren in Abhängigkeit an Bedingungen richtig setzen

BodyLAB

Bekanntes Mitglied
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:
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. :confused:

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?
 

ChrisianM

Mitglied
Ich würde sagen, du müsstest auf jeden Fall die auf dem Lager bereits befindliche Menge in einer Variable mitlaufen lassen.

Also in etwa so:

Java:
imLagerBefindlich = 0;

If imLagerBefindlich + neueLademenge <= 20 {
   ProzessSemaphore();
   imLagerBefindlich += neueLademenge;

else {
   abbrechen();
 

BodyLAB

Bekanntes Mitglied
Ich hab die Aufgabenstellung im Internet gefunden :) Wurde bei uns nur etwas abgeändert.

Aufgabe 1 ist meine Aufgabe. Leider finde ich derzeit keine Lösung dazu :-D
Ich weiß nämlich nicht ob es erlaubt ist ein wert dort mit rein zu geben oder ob das alles nur mit Semaphore erledigt werden soll?
 

BodyLAB

Bekanntes Mitglied
So also ich hab es jetzt so gemacht wie @AnfängerHoch10 geschrieben. Ob das erlaubt ist weiß ich nicht.

Als erstes benötige ich damit auch nur noch 3 Semaphore.
Der erste ist eben der dafür sorgt das immer nur ein Prozess zur Rampe läuft.
Der zweite und dritte ist das Abfragen ob eine "Couch" oder "Schrank" vorhanden sind <- ich orientiere mich jetzt an dem PDF von oben! Gefällt mir besser.

Mein Lösung würde dann wie folgt aussehen:

Java:
Semaphore: Rampe(1), S(0), C(0);


Proicess S {
    while(true) {
        S.p();
        Rampe.p();
        <zur Rampe fahren>
        <1 Schrank aufladen>
        <Rampe verlassen>
        Rampe.v();

    }
}

Proicess C {
    while(true) {
        C.p();
        Rampe.p();
        <zur Rampe fahren>
        <1 Couch aufladen>
        <Rampe verlassen>
        Rampe.v();

    }
}

Proicess F {
    imLagerBefindlich = 0;
    while(true) {
        if(imLagerBefindlich + 2 <= 20) {
            Rampe.p();
            imLagerBefindlich += 2;
            <zur Rampe fahren>
            <1 Schrank aufladen>
            S.v();
            <1 Couch aufladen>
            C.v();
            <Rampe verlassen>
            Rampe.v();
        }
    }
}

Dadurch das immer nur ein Prozess zur selben Zeit etwas abarbeitet benötigt man keine zwischen Synchronisation zwischen den Prozessen also sprich wenn ein Prozess ran darf, kann bzw. muss dieser auch zu ende laufen. Deswegen arbeitet Prozess C und S auch alles auf einmal ab und geben die Rampe wieder frei.

Falls jemand weiß wie das mit der Kapazität sonst gehen würde only semaphores wäre das echt Klasse würdet Ihr es mit mir Teilen :cool:
Ansonsten weiß ich auch nicht ob das so zu 100% korrekt ist?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N UML Dependency/Abhängigkeit von SetterMethoden Java Basics - Anfänger-Themen 1
H Führende Nullen in Abhängigkeit von der Stellenanzahl einer Konstante Java Basics - Anfänger-Themen 4
M CellReender Zellenfarbe int abhängigkeit einer anderen Zelle Java Basics - Anfänger-Themen 13
J Anzahl von for-Schleifen in Abhängigkeit von Zahleneingabe erzeugen Java Basics - Anfänger-Themen 1
D Sortieren in Abhängigkeit von einer anderen Sortierung Java Basics - Anfänger-Themen 14
G Variablen in Abhängigkeit vom Betriebssystem festlegen Java Basics - Anfänger-Themen 6
C Combobox in Abhängigkeit von Spinner Java Basics - Anfänger-Themen 6
W Abhängigkeit 3er Variablen Java Basics - Anfänger-Themen 6
H Aktualisierung des JProgressBar in Abhängigkeit eines Threads Java Basics - Anfänger-Themen 5
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
B Klassen beerben, die in Abhängigkeit zueinander stehen Java Basics - Anfänger-Themen 2
N Abhängigkeit zu anderen Jar Dateien Java Basics - Anfänger-Themen 2
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
T Mehrere if bedingungen ohne & Java Basics - Anfänger-Themen 2
B If Bedingungen kombinieren? Java Basics - Anfänger-Themen 5
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
A Bedingungen für Parameterwerte Java Basics - Anfänger-Themen 7
J Unit Testing mit vielen Bedingungen - Best Practice? Java Basics - Anfänger-Themen 9
S mehrere If Bedingungen Java Basics - Anfänger-Themen 5
U Schleife mit mehreren Bedingungen ? Java Basics - Anfänger-Themen 29
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
E Bedingungen abkürzen Java Basics - Anfänger-Themen 13
S Erste Schritte Begrüßung mit if-Bedingungen Java Basics - Anfänger-Themen 7
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
G While schleife mit 2 Bedingungen geht nicht! Java Basics - Anfänger-Themen 15
H Bedingungen miteinander verknüpfen Java Basics - Anfänger-Themen 2
J if Bedingungen verknüpfen Java Basics - Anfänger-Themen 8
K Bedingungen else Java Basics - Anfänger-Themen 7
M Variablen Switch Bedingungen Java Basics - Anfänger-Themen 12
W for Schleife mit zwei bedingungen ? Java Basics - Anfänger-Themen 6
F Bedingungen mit Abfragen verknüpfen Java Basics - Anfänger-Themen 7
W Was tun die Operatoren ? und : (Bedingungen) Java Basics - Anfänger-Themen 15
T Scanner für char-wert/ if mit 2 bedingungen? Java Basics - Anfänger-Themen 5
Q If-Abfrage mit mehreren Bedingungen Java Basics - Anfänger-Themen 6
reno Bedingungen in Konfigurationsdatei Java Basics - Anfänger-Themen 2
K Bedingungen mit "und" trennen ? Java Basics - Anfänger-Themen 2
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
M Kann man Bedingungen auch ohne Schleifen prüfen? Java Basics - Anfänger-Themen 5
C switch-case mit bedingungen? Java Basics - Anfänger-Themen 5
NightmareVirus 2 Abbruch Bedingungen in einer for-schleife Java Basics - Anfänger-Themen 2
G Schleifen mit mehreren Bedingungen Java Basics - Anfänger-Themen 4
G Mehrere If Bedingungen Java Basics - Anfänger-Themen 11
A Mehrere if Bedingungen untereinander? Java Basics - Anfänger-Themen 4
J if-Bedingungen in C und Java Java Basics - Anfänger-Themen 4
G if-Abfrage mit zwei Bedingungen Java Basics - Anfänger-Themen 6
C zwei Bedingungen in einer if Anweisung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben