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

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  #include #include  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 quisont bloqués surla variable de condition spécifiée cond (le cas échéantles 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
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!