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. #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...