Saya menghadapi masalah semasa saya belajar pthread, saya tidak pasti mengenainya, jadi saya akan menyiarkan kod tersebut terlebih dahulu
#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");
}
Jika anda mengulas tidur(1), anda akan terperangkap dalam penantian yang tidak terhingga. Jika anda menambahnya (saya secara peribadi berpendapat ia adalah untuk memastikan bahawa utas lain sudah menunggu untuk bangun sebelum isyarat utas utama), anda boleh mengeluarkan dua ayat log secara normal dan keluar. Punca fenomena ini boleh difahami sebagai kerana benang jatuh ke dalam tidur kerana cond_wait Bolehkah ia dikejutkan hanya dengan memberi isyarat cond selepas ia tidur? Saya mencari dalam talian dan tidak menemui sebarang artikel yang menyatakannya secara khusus. Harap anda boleh memberi saya nasihat. Atau bantu saya mengesahkan, untuk cond, dengan mengandaikan bahawa thread A mula-mula memanggil cond_signal, dan kemudian B memanggil cond_wait, bolehkah B dikejutkan?
不能唤醒。