Heim  >  Fragen und Antworten  >  Hauptteil

Linux – Cond-Problem in Pthread

Ich bin beim Lernen von pthread auf ein Problem gestoßen, da ich mir nicht sicher bin, also werde ich zuerst den Code posten

#include <pthread.h>
#include <stdio.h>#include <unistd.h>

pthread_cond_t cond;
pthread_mutex_t mutex;

void *Test(void *arg) {
  pthread_mutex_lock(&mutex);
  while (1) {
    pthread_cond_wait(&cond, &mutex);
    printf("Got notified\n");
    break;
  }
  pthread_mutex_unlock(&mutex);
  return NULL;
}

int main() {
  pthread_cond_init(&cond, NULL);
  pthread_mutex_init(&mutex, NULL);
  pthread_t t;
  pthread_create(&t, NULL, Test, NULL);
  sleep(1);
  pthread_mutex_lock(&mutex);
  pthread_cond_signal(&cond);
  pthread_mutex_unlock(&mutex);
  pthread_join(t, NULL);
  printf("Exit\n");
}

Wenn Sie „sleep(1)“ auskommentieren, stecken Sie in endlosem Warten fest. Wenn Sie es hinzufügen (ich persönlich denke, es soll sicherstellen, dass ein anderer Thread bereits darauf wartet, vor dem Haupt-Thread-Signal aufzuwachen), können Sie zwei Protokollsätze normal ausgeben und beenden. Der Grund für dieses Phänomen kann darin liegen, dass ein Thread aufgrund von cond_wait in den Ruhezustand fällt. Kann er nach dem Ruhezustand nur durch das Signalisieren von cond aufgeweckt werden? Ich habe im Internet gesucht und konnte keinen Artikel finden, in dem dies ausdrücklich erwähnt wurde. Ich hoffe, Sie können mir einen Rat geben. Oder helfen Sie mir zu bestätigen, dass für einen Cond, vorausgesetzt, Thread A ruft zuerst cond_signal auf und dann B cond_wait aufruft, kann B geweckt werden?

PHP中文网PHP中文网2640 Tage vor810

Antworte allen(1)Ich werde antworten

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-30 09:58:48

    The pthread_cond_signal() function shall unblock at least one of the threads that are blocked on the specified condition variable cond (if any threads are blocked on cond). die

    不能唤醒。

    Antwort
    0
  • StornierenAntwort