Verständnis von pthread_cond_wait () und pthread_cond_signal ()

Generell pthread_cond_wait() und pthread_cond_signal() genannt werden, wie unten:

//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);

//thread 2:
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);  
pthread_mutex_unlock(&mutex);

Die Schritte sind

  1. pthread_cond_wait(&cond, &mutex); heißt, es entsperrt den mutex
  2. Thread 2 sperrt den mutex und ruft pthread_cond_signal()welche entsperrt den mutex
  3. In thread 1, pthread_cond_wait() genannt wird, und sperrt den mutex wieder

Nun in thread 2, nach pthread_cond_signal() genannt wird, pthread_mutex_unlock(&mutex) laufen, mir scheint, es will zu entsperren das mutex, das ist nun gesperrt, die von thread 1. Gibt es etwas falsch in meinem Verständnis?

Außerdem, es scheint mir auch, dass pthread_cond_wait() können aufgerufen werden, indem Sie nur 1 thread für das gleiche cond-mutex-pair-Mädchen. Aber es gibt ein Sprichwort "Der pthread_cond_signal () - Funktion ist die Blockierung mindestens einer der threads, die gesperrt sind, auf die spezifizierte bedingungsvariable cond (wenn alle threads blockiert sind cond)." Also, es bedeutet pthread_cond_wait() aufgerufen werden können, von vielen threads für das gleiche cond-mutex-pair-Mädchen?

InformationsquelleAutor der Frage user1944267 | 2013-05-13

Schreibe einen Kommentar