linux - pthread中cond问题
PHP中文网
PHP中文网 2017-06-30 09:56:48
0
1
764

学习pthread的时候遇到一个问题,有点不是太确定的情况,先贴下代码

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

如果将sleep(1)注释掉,就会陷入无限的等待中。如果加上(个人认为是确保在主线程signal的之前另一个线程已经在等待唤醒),就可以正常的输出两句log,并且退出。这个现象的原因可以理解为是因为一个线程因为cond_wait陷入睡眠,只有在它睡眠后对cond进行signal才能唤醒吗?网上找了一下没有找到说的特别明确的文章。希望可以指点一下。或者说帮我确认一下,对于一个cond,假设线程A先调用了cond_signal,而之后B才调用了cond_wait,可以唤醒B吗?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复 (1)
女神的闺蜜爱上我

pthread_cond_signal() 函数应至少解锁一个在指定条件变量 cond 上被阻塞的线程(如果有线程在 cond 上被阻塞)。死吧

不能唤醒。

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!