Linux - problème de cond dans pthread
PHP中文网
PHP中文网 2017-06-30 09:56:48
0
1
898

J'ai rencontré un problème lorsque j'apprenais pthread, je n'en suis pas sûr, je vais donc d'abord publier le code

.
#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");
}

Si vous commentez sleep(1), vous serez coincé dans une attente infinie. Si vous l'ajoutez (je pense personnellement que c'est pour vous assurer qu'un autre thread attend déjà de se réveiller avant le signal du thread principal), vous pouvez générer deux phrases de journal normalement et quitter. La raison de ce phénomène peut être comprise comme étant qu'un thread tombe en veille à cause de cond_wait. Peut-il être réveillé uniquement en signalant cond après s'être endormi ? J'ai cherché sur Internet et je n'ai trouvé aucun article qui le disait spécifiquement. J'espère que vous pourrez me donner quelques conseils. Ou aidez-moi à confirmer, pour un cond, en supposant que le thread A appelle d'abord cond_signal, puis B appelle cond_wait, B peut-il être réveillé ?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(1)
女神的闺蜜爱上我

La fonction pthread_cond_signal() doit débloquer au moins un des threads qui sont bloqués sur la variable de condition spécifiée cond (le cas échéant les threads sont bloqués sur cond). mourir

不能唤醒。

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal