also brauche ich ziemlich viel Hilfe. Die Aufgabe besteht also darin, ein Café zu simulieren. Es ist ein Café mit 5 Sitzplätzen. Wenn Sie ankommen, während ein Platz frei ist, können Sie sofort Platz nehmen. Aber wenn Sie ankommen, wenn alle 5 Plätze voll sind, bedeutet das, dass alle Kunden gemeinsam Kaffee trinken, und Sie müssen warten, bis die ganze Gruppe gegangen ist (alle 5 Plätze werden frei), bevor Sie sich setzen.Simulieren von Kunden-/Mitarbeiter-Threads mit Warteschlangen und Semaphoren
Dies muss mit Threads erzwungen werden. Die Anzahl der Kunden wird als Befehlszeilenargument übergeben.
Wie auch immer, ich habe Probleme herauszufinden, wie man das macht.
Ich dachte - sollte ich die bereitgestellte Semaphore-Klasse verwenden und mache ich zwei Warteschlangen vom Typ "CustomerThread" und haben eine von ihnen die Schlange für die Kunden, die gerade trinken, und eine weitere Schlange für Kunden, die Schlange stehen? Oder sollten die Wartenden eine BlockedQueue sein? Ich bin mir jedoch nicht sicher, wie ich die 5-Sitzer-Regel durchsetzen kann. Wenn zum Beispiel zwei Threads fertig sind und den Laden verlassen, sind zwei Plätze offen, aber bis alle fünf offen sind, können wir die nächsten fünf nicht zur Warteschlange hinzufügen und aus der Warteschlange entfernen.
Ich würde nicht diejenigen, die trinken/sitzen in einer Warteschlange setzen. Die Warteschlange (n) dienen zum Warten. Es muss etwas geben, das bestimmt, wie lange sie sitzen und trinken, also lass sie einfach laufen. Die 5-Platz-Regel kann mit einer äußeren Sperre für die Logik ausgeführt werden, die eingehende Kunden verarbeitet. Es würde eingestellt werden, wenn alle 5 Sitze genommen und freigegeben werden, wenn alle weg sind. – ChiefTwoPencils