Maison  >  Questions et réponses  >  le corps du texte

Linux - problème de cond dans pthread

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中文网2640 Il y a quelques jours809

répondre à tous(1)je répondrai

  • 女神的闺蜜爱上我

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

    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

    不能唤醒。

    répondre
    0
  • Annulerrépondre