Pthread: sicherstellen cond_signal erst nach Aufruf cond_wait

Diskutiere Pthread: sicherstellen cond_signal erst nach Aufruf cond_wait im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo, Gibt es eine Möglichkeit zu überprüfen, ob ein pthread_cond_wait aufgerufen wurde, damit man ein pthread_cond_signal nicht zu früh abgibt?...

  1. #1 philipp501, 29.06.2009
    philipp501

    philipp501 Grünschnabel

    Dabei seit:
    17.03.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,
    Gibt es eine Möglichkeit zu überprüfen, ob ein pthread_cond_wait aufgerufen wurde, damit man ein pthread_cond_signal nicht zu früh abgibt?

    Code:
    main
    {
    pthread_create(mein_thread);
    pthread_mutex_lock(mutex);	//lock 1
    ...
    pthread_cond_signal(mutex);
    pthread_unlock(mutex);
    ...
    }
    
    mein_thread
    {
    	pthread_mutex_lock(mutex);	//lock 2
    	pthread_cond_wait(mutex);
    	...
    	pthread_mutex_unlock;
    }
    In diesem Beispiel würde ein thread erzeugt und dann in beiden threads versucht den mutex zu locken.
    Es sollte so sein, dass mein_thread auf jeden Fall als erster lockt, da sonst sein cond_wait nicht vor dem cond_signal aufgerufen wird. Kann man das irgendwie sicherstellen?

    Ich hoffe es ist klar, was ich meine.

    Danke schonmal
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 martinprange, 29.07.2009
    martinprange

    martinprange Gast

    [...]
    Gibt es eine Möglichkeit zu überprüfen, ob ein pthread_cond_wait aufgerufen wurde, damit man ein pthread_cond_signal nicht zu früh abgibt?
    [...]

    Sowas nennt man koordinationstechnisch ein "Rendezvous".
    Dazu baust eine "barrier" b
    aus einer posix wait condition w , einer mutex m als monitor,
    einer mutex wm und einem counter c= 1..n
    ( n= Anzahl der rendezvous )

    initial { c= 0; m.lock(), wm.lock() }

    sobald Du die Barriere ausfuehren willst: b.wait();
    sobald irgend(!)einer der Threads ein b.wait() ausfuehrt:
    wird der monitor gelockt m.lock(),
    c inkrementiert.
    nun unterscheiden wir 2 Faelle:
    Wenn c == n,
    dann: w.broadcast()
    sonst: m.unlock() und w.wait(m, optional_timeout_args);
    danach: wm.lock() und m.unlock();

    Voila, alle Threads sind synchron "at least for one glimpse"...

    ref: http://opengroup.org/onlinepubs/007908799/xsh/pthread.h.html
     
Thema:

Pthread: sicherstellen cond_signal erst nach Aufruf cond_wait

Die Seite wird geladen...

Pthread: sicherstellen cond_signal erst nach Aufruf cond_wait - Ähnliche Themen

  1. Problem mit pthread_cond_timedwait

    Problem mit pthread_cond_timedwait: Hallo zusammen, ich habe beim Aufruf von pthread_cond_timedwait das Problem, dass die Funktion sofort mit ETIMEOUT zurückkehrt; egal was als...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden