Pthread: sicherstellen cond_signal erst nach Aufruf cond_wait

Dieses Thema im Forum "C/C++" wurde erstellt von philipp501, 29.06.2009.

  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

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

    martinprange Grünschnabel

    Dabei seit:
    29.07.2009
    Beiträge:
    1
    Zustimmungen:
    0
    [...]
    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. Pthread unter openSuse 10.2 64bit Version

    Pthread unter openSuse 10.2 64bit Version: Hallo Leute, hat hier jemand Erfahrung mit der Thread-Programmierung unter OpenSuse 10.2 64 bit Version! Hab da nämlich ein kleines Problem,...
  2. 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...
  3. pthread demo läuft unter KDevelop nicht ??

    pthread demo läuft unter KDevelop nicht ??: Hallo, ich habe das pthread Demo von http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html in ein Kdevelop C Projekt kopiert. Beim...