读书人

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

发布时间: 2013-03-12 11:19:35 作者: rapoo

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

读书人网 >UNIXLINUX

热点推荐