Threads || Prozesse & Semaphoren

Dieses Thema im Forum "C/C++" wurde erstellt von Pliskin88, 10.06.2010.

  1. #1 Pliskin88, 10.06.2010
    Pliskin88

    Pliskin88 Grünschnabel

    Dabei seit:
    10.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,
    ich muss für die Schule eine simulation programmieren.
    Es handelt um diese Problemstellung:

    "Simulieren sie eine Mautstelle mit zwei kassen. Sobald eine kasse frei wird, darf ein Auto zur Kasse fahren.
    Die Autos können entweder als Prozesse (fork) oder als Threads realisiert werden"

    Ich hab das Programm soweit geschrieben, sodass es für eine Kasse gilt.
    Auto (Thread) fährt in die Kasse dann wird die kasse locked und danach wieder entlocked.
    Aber, da es 2 Kassen sind, verzweifle ich hier etwas.
    Wie kann ich denn abfragen, welche kasse gerade nicht locked ist? Und wenn ich das herauskriege, wie sag ich dem Thread, dass er diese Funktion(kasse) benutzen soll und nicht die andere???

    Ich bin über jede Gedankenstütze oder Pseudo codes oder sonstige Hilfe dankbar.
    Ich bin in dem gebiet leider noch ein Neuling und kenne mich nicht so aus.
    Google hilft da auch nicht viel weiter, weil ich da nur die Grundlagen finde.

    Liebe Grüße und einen schönen Tag noch
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. baggio

    baggio Jungspund

    Dabei seit:
    17.05.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Hi,

    also wenn du die Aufgabe mit (P-)Threads lösen willst, kannst du dir die Nutzung von Condition Variables (z.B. https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables) anschauen. Nach einem Aufruf der Methode pthread_cond_wait() wartet ein Thread solange, bis ihm von einem anderen Thread durch pthread_cond_signal() signalisiert wird, dass er weiterlaufen soll. Wäre also für deine Aufgabe interessant.

    P.S. Im OpenBook "The Little Book of Semaphores" (http://www.greenteapress.com/semaphores/ finden sich viele weitere interessante Concurrency-Probleme und deren Lösungen.
     
  4. #3 Pliskin88, 11.06.2010
    Pliskin88

    Pliskin88 Grünschnabel

    Dabei seit:
    10.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    hey, wow das könnte mir weiterhelfen danke *les*

    NOch eine frage:
    Gibt es eine Funktion, die man abfragen kann, ob ein Semaphor gerade frei ist oder nicht?
     
  5. baggio

    baggio Jungspund

    Dabei seit:
    17.05.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Dafür gibt es die Funktion:
    Code:
    int sem_getvalue(sem_t *sem, int *valp);
    Vorsicht: Der Rückgabewert gibt nur Erfolg(0) oder Fehlschlag(-1) an, der Wert der Semaphore wird an die Position des valp Pointers geschrieben.

    Gruß,
    baggio
     
  6. #5 Pliskin88, 12.06.2010
    Pliskin88

    Pliskin88 Grünschnabel

    Dabei seit:
    10.06.2010
    Beiträge:
    3
    Zustimmungen:
    0
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    #include <pthread.h>
    
    pthread_mutex_t mutex1, mutex2;
    
    void *kasse1(void *dummy)
    {
       pthread_mutex_lock(&mutex1);
       printf("Kasse_1 bezahlt!");
       pthread_mutex_unlock(&mutex1);
       return NULL;
    }
    
    void *kasse2(void *dummy)
    {
       pthread_mutex_lock(&mutex2);
       printf("Kasse_2 bezahlt!");
       pthread_mutex_unlock(&mutex2);
       return NULL;
    }
    
    int main()
    {
      int dummy;
      pthread_t p1,p2;
      pthread_mutex_init(&mutex1,NULL);
      pthread_mutex_init(&mutex2,NULL);
    
      pthread_create(&p1, NULL, kasse1, &dummy);
      pthread_create(&p1, NULL, kasse2, &dummy);
    
      pthread_join (p1, NULL);
      pthread_join (p2, NULL);
    
      return 0;
    }
    
    
    Habe es jetzt soweit programmiert...Aber weiter komme ich einfach nicht.
    Wie soll ich dem Thread sagen, dass, wenn zb kasse_1 schon besetzt ist, er die zweite kasse benutzen soll.
     
  7. baggio

    baggio Jungspund

    Dabei seit:
    17.05.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Servus,

    ich würde nach der Aufgabenstellung etwas anders an die Aufgabe herangehen. Meiner Meinung nach wird hier nach einer Lösung für ein Producer-Consumer Problem gesucht. Die beiden Threads kasse1 und kasse2 entsprechen dabei den Consumern. Wenn du noch einen Thread hinzufügst, der eine Queue(z.B. eine verkettete Liste, für eine erste Implementierung reicht aber bestimmt auch ein Array) mit Einträgen (Autos) füllt, wäre das der Producer. Dieser würde simulieren, wie sich Autos in die Schlange einreihen.

    Die Consumer müssen dann den Zugriff auf die Queue sperren. Wenn sich dabei Einträge in der Queue befinden, entfernen sie den ersten Eintrag und fahren fort. Wenn die Queue leer ist, müssen der Consumer so lange blockieren, bis er vom Producer ein pthread_cond_signal() empfängt, damit er weiss, das sich wieder mindestens ein Eintrag in der Liste befindet.

    Gruß,
    baggio
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Threads || Prozesse & Semaphoren

Die Seite wird geladen...

Threads || Prozesse & Semaphoren - Ähnliche Themen

  1. Arbeitsspeicher von Perl Threads wieder freigeben

    Arbeitsspeicher von Perl Threads wieder freigeben: Hallo Leute, sitze an einem Problem mit Perl Threads. Ich habe ein Perl Programm geschrieben das eine Menge Threads erzeugt. Die Threads...
  2. Evolution(Newsreader) alle Threads automatisch einklappen

    Evolution(Newsreader) alle Threads automatisch einklappen: Hallo, Wie stelle ich es an, dass beim Öffnen einer Newsgroup in Evolution alle Threads eingeklappt angezeigt werden? Default ist es so, das die...
  3. Posix Threads Kommunikation über Message Queues??

    Posix Threads Kommunikation über Message Queues??: Hallo Leute, ich hätte da mal eine Frage, bei der Suche hab ich nichts finden können, und zwar soll ich eine Kommunikation zwischen Threads über...
  4. Vorschlag: Neue Benutzer und alte Threads

    Vorschlag: Neue Benutzer und alte Threads: Guten Abend, da mir in letzter Zeit unangehm auffällt, wieviele neue Benutzer Leichenschändung betreiben, frage ich mal unverbindlich nach...
  5. Threads löschen closen

    Threads löschen closen: entwickle derzeit ein Forum und bin beim Punkt Caching in der Konzeption. Mein Ziel ist es, durch Caching möglichst hohe Performance zu gewinnen,...