Ich habe ein Projekt, wo ich Pseudo-Code für eine Semaphore zu schreiben, aus dem folgenden Text:Concurrent-Programmierung, wie baue ich einen Semaphor?
„ein Szenario vor, wo ein einzelne Taxi Manchester United und Liverpool Fans vom Stadtzentrum bis Samstag Fußballspiel stattfindet. Das Taxi kann vier Supporter gleichzeitig aufnehmen und es ist immer voll besetzt, wenn man Supporter trägt, aber die Situation darf niemals entstehen, wenn das Taxi einen Supporter eines der Teams isoliert von sich selbst enthält, das Taxi führt eine Reihe von Fahrten durch und wenn es zum ersten Mal ankommt, signalisiert es zufällig einer der Warteschlangen der beiden wartenden Supporter: Sie können davon ausgehen, dass immer ein oder mehrere Supporter in jeder Warteschlange warten, wenn es signalisiert wird, wenn ein Unterstützer das Taxi betritt und noch Platz ist für mehr Unterstützer im Taxi der Unterstützer (wer ha s ist gerade dem Taxi beigetreten) signalisieren einem anderen wartenden Unterstützer in einer der Warteschlangen, dass sie auch das Taxi betreten. Wo es möglich ist, wählt der Unterstützer nach dem Zufallsprinzip die Warteschlange aus, um sie zu signalisieren. Bei Bedarf wählt er jedoch eine bestimmte Warteschlange aus, um sicherzustellen, dass kein einzelner Unterstützer im Taxi mit gegnerischen Unterstützern isoliert wird.
Der letzte Unterstützer, der das Taxi betritt, um eine volle Kohorte von vier Unterstützern im Taxi zu vervollständigen, signalisiert dem Taxi (Fahrer), sie zum Fußballplatz zu bringen. Das Taxi bringt sie zu ihrem Bestimmungsort und kehrt dann zurück, um den Zyklus zu wiederholen. Beachten Sie, dass nur die Unterstützer (nicht der Taxifahrer) unterscheiden können, wer ein Unterstützer von Manchester United ist und wer ein Unterstützer von Liverpool ist. "
Ich habe Probleme beim Anwenden der Notizen, die ich habe Online diesem Szenario
Heres, was ive bisher getan.?
int numManInTaxi = 0; //current no. of ManU supporters in taxi
int numLivInTaxi = 0;
sem MaxUnitedFans = 4; // // max no. of supporters that can fit in taxi
sem MaxLivFans = 4;
sem MMutexSem = 1;
sem LMutexSem = 1;
CO
for (count = 1 to ManUSupporter){
ManUProcess[count];
//
for (count = 1 to LivSupporter){
LivProcess[count];
OC
} /*end main process
process ManUProcess [i = 1 to N]{
P(MMutexSem); // mutually exclusice access for United supporter
numManUInTaxi++;
if ((numManInTaxi+numLivInTaxi) < 4)
{
if (numManuInTaxi == 3) { // signal the Man queue
numManUInTaxi++;
} else if ((numManUInTaxi ==1) && (numLivInTaxi==2)){
numManUInTaxi++;
} else if ((numManInTaxi == 2) &&(numLivInTaxi==1)) {
V(MMutexSem);
NumLivInTaxi++;}
//end ManU supporter semaphore
Make-konnte Was haben Sie versucht, Sie werden mehr und besser Antworten Wenn du zeigst, was du versucht hast, und demonstrierst, dass du dir die Zeit genommen hast, dir selbst zu helfen. Siehe [Fragen] –
Ich habe versucht, es zu bauen, aber ich bin fast sicher, dass es nicht korrekt ist. In dem Szenario kann es entweder 4 Unterstützungen von Mann vereint in einem Taxi, 2 von jedem Satz von Unterstützern oder 4 Liverpool-Unterstützer sein. Es sollte nicht ein Szenario geben, in dem eine Gruppe von Unterstützern von der anderen unterlegen ist. – 944jmc
Entschuldigung, neu dazu, jetzt zur Hauptfrage hinzugefügt – 944jmc