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