Bierlieferung_simulation

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bierlieferung_simulation

    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:

    Quellcode

    1. semaphore LKW_kunde;
    2. semaphore LKW_Brauerei;
    3. semaphore mutex;
    4. semaphore abfahrt;
    5. int LKW_kisten ; // Shared memory
    6. //init
    7. abfahrt = 0;
    8. LKW_brauerei = 12; // 12 Plätze auf dem LKW vorhanden
    9. LKW_kunde = 12;
    10. mutex = 1;
    11. LKW_Kisten = 0;
    12. void VerladeArbeiter(kisten)
    13. {
    14. sleep(2); // 2 minuten im lager
    15. sleep(3); // 3 minuten zum lkw
    16. wait(LKW_brauerei, kisten); // veringert den wert der Semaphore um "kisten" wenn größer 0 prozess darf betreten werden
    17. wait(mutex); // sichert sich den zugriff auf lkw oder betritt lkw
    18. LKW_kisten + = kisten;
    19. if (LKW_kisten == 12)
    20. {
    21. signal(abfahrt);
    22. }
    23. signal (mutex); // Arbeiter verlässt lkw der nächste darf betreten
    24. }
    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

    Quellcode

    1. /* Erzeugen eines neuen Prozesses */
    2. cpid1 = fork();
    3. /* Fehlerbehandlung */
    4. if(cpid1 == -1)
    5. {
    6. fprintf(stderr,"Fehler bei fork()\n");
    7. exit(0);
    8. }
    9. if(cpid1 == 0)
    10. {
    11. Verlade_Arbeiter(bier_brauerei);
    12. while(1);
    13. }
    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 ;)