Linux – Cond-Problem in Pthread
PHP中文网
PHP中文网 2017-06-30 09:56:48
0
1
852

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中文网

认证高级PHP讲师

Antworte allen(1)
女神的闺蜜爱上我

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

不能唤醒。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!