日期:2014-05-16  浏览次数:20587 次

POSIX条件变量问题???大侠进

pthread_mutex_t mutex;
pthread_cond_t cond;

void *thwork(void *arg)
{
    pthread_detach(pthread_self());
    pthread_mutex_lock(&mutex);
    pthread_cond_wait(&cond,&mutex);//查资料说wait会阻塞线程,释放mutex锁。。。然后等待条件成立,然后返回继续执行。
    pthread_mutex_unlock(&mutex);//我就想不明白,既然调wait的时候已经释放了mutex锁,为什么这里还要释放一次呢。
    pthread_exit((void*)0);
}

    int tmp=0;
    pthread_t pthid;
    pthread_mutex_init(&mutex,NULL);
    pthread_cond_init(&cond,NULL);
    pthread_create(&pthid,NULL,thwork,NULL);
    sleep(60);
    pthread_cond_signal(&cond);


------解决方案--------------------
cond_wait返回会重新获取锁。

还是扎实的学习UNIX环境高级编程等书吧。
------解决方案--------------------
pthread_cond_wait先unlock,等待, 被唤醒后再lock.
所以pthread_cond_wait返回时,mutex是被自己lock的。所以要再次释放
man pthread_cond_wait