Hallo liebe C Freunde!
Ich habe ein Programm geschrieben welches mir den Vorgang bei einer Brauerei simuliert:
Ein Arbeiter holt 3 kisten aus dem lager bringt sie zum lkw. Der Arbeiter braucht 2 minuten im lager und 3 minuten zum lKW hin ...
dieser Vorgang wird wieder holt bis 12 Kisten im LKW sind erst dann darf der LKW losfahren.
Der LKW fährt also zum Kunden braucht 4 minuten fahrzeit hin und zurück
beim Kunden wird der Lkw wieder enladen hier kann ein Arbeiter nur 2 kisten nehmen braucht 1 minute auf dem LKW und 4 Minuten vom LKW zum lager wenn der Lkw wieder leer ist fährt er wieder zurück zur brauerei wo er wieder beladen wird dieser vorgang geht dann immer so weiter.
So nun darf aber auf den LKW immer nur ein Arbeiter sein das heißt alle anderen Arbeiter müssen warten !
Ich habe das ganze nun mit Semaphoren und Sharedmemory umgesetzt hier mal der VerladeArbeiter bei der Brauerei als beispiel in Pseudocode:
Alles anzeigen
wait = P() und signal = V() fh-wedel.de/~si/seminare/ws04/…leleProgrammierung/2c.htm
nun kann ich leider nicht den kompletten code hier posten das wäre einfach zu lang ich habe nun also 3 porzesse VerladeArbeiter LKWFahrer und VlerladeArbeiterKunde
das ganze hab ich in C implementiert und funzt soweit auch gut heißt also die Semaphoren werden angelegt der Shared memory auch er läuft in die einzelen prozesse rein und gibt auch entsprechende ausgaben!
nur der Scheduler mag nicht so recht er Fängt nämlich beim Kunden an läuft ein paar mal durch springt dann zum VerladeArbeiter bei der Brauerei und dann mal kurz zum LKW fahrer :
Ich vermute das liegt daran wie ich meine Prozesse erzeuge das geschieht nämlich über fork () in der main
Alles anzeigen
das gaze natürlich 3 mal einmal mit lkw fahrer, verladeArbeiter, und VerladeArbeiterkunde
Also ist die Frage nun wie kann ich den das Steuern ich möchte nur mit dem VerladeArbeiter an der Brauerei anfangen und dann eben durch die Semaphoren hin und her wechseln!
Und nicht das der Scheduler nun wilkürlich hin und her springt und nur teile der Prozesse ausführt ???
Kann mir da jemand helfen ?
Danke im vorraus und sorry für den langen Text
Ich habe ein Programm geschrieben welches mir den Vorgang bei einer Brauerei simuliert:
Ein Arbeiter holt 3 kisten aus dem lager bringt sie zum lkw. Der Arbeiter braucht 2 minuten im lager und 3 minuten zum lKW hin ...
dieser Vorgang wird wieder holt bis 12 Kisten im LKW sind erst dann darf der LKW losfahren.
Der LKW fährt also zum Kunden braucht 4 minuten fahrzeit hin und zurück
beim Kunden wird der Lkw wieder enladen hier kann ein Arbeiter nur 2 kisten nehmen braucht 1 minute auf dem LKW und 4 Minuten vom LKW zum lager wenn der Lkw wieder leer ist fährt er wieder zurück zur brauerei wo er wieder beladen wird dieser vorgang geht dann immer so weiter.
So nun darf aber auf den LKW immer nur ein Arbeiter sein das heißt alle anderen Arbeiter müssen warten !
Ich habe das ganze nun mit Semaphoren und Sharedmemory umgesetzt hier mal der VerladeArbeiter bei der Brauerei als beispiel in Pseudocode:
Quellcode
- semaphore LKW_kunde;
- semaphore LKW_Brauerei;
- semaphore mutex;
- semaphore abfahrt;
- int LKW_kisten ; // Shared memory
- //init
- abfahrt = 0;
- LKW_brauerei = 12; // 12 Plätze auf dem LKW vorhanden
- LKW_kunde = 12;
- mutex = 1;
- LKW_Kisten = 0;
- void VerladeArbeiter(kisten)
- {
- sleep(2); // 2 minuten im lager
- sleep(3); // 3 minuten zum lkw
- wait(LKW_brauerei, kisten); // veringert den wert der Semaphore um "kisten" wenn größer 0 prozess darf betreten werden
- wait(mutex); // sichert sich den zugriff auf lkw oder betritt lkw
- LKW_kisten + = kisten;
- if (LKW_kisten == 12)
- {
- signal(abfahrt);
- }
- signal (mutex); // Arbeiter verlässt lkw der nächste darf betreten
- }
wait = P() und signal = V() fh-wedel.de/~si/seminare/ws04/…leleProgrammierung/2c.htm
nun kann ich leider nicht den kompletten code hier posten das wäre einfach zu lang ich habe nun also 3 porzesse VerladeArbeiter LKWFahrer und VlerladeArbeiterKunde
das ganze hab ich in C implementiert und funzt soweit auch gut heißt also die Semaphoren werden angelegt der Shared memory auch er läuft in die einzelen prozesse rein und gibt auch entsprechende ausgaben!
nur der Scheduler mag nicht so recht er Fängt nämlich beim Kunden an läuft ein paar mal durch springt dann zum VerladeArbeiter bei der Brauerei und dann mal kurz zum LKW fahrer :
Ich vermute das liegt daran wie ich meine Prozesse erzeuge das geschieht nämlich über fork () in der main
Quellcode
das gaze natürlich 3 mal einmal mit lkw fahrer, verladeArbeiter, und VerladeArbeiterkunde
Also ist die Frage nun wie kann ich den das Steuern ich möchte nur mit dem VerladeArbeiter an der Brauerei anfangen und dann eben durch die Semaphoren hin und her wechseln!
Und nicht das der Scheduler nun wilkürlich hin und her springt und nur teile der Prozesse ausführt ???
Kann mir da jemand helfen ?
Danke im vorraus und sorry für den langen Text
