简单假设线程1、2,curnum 值为 1, 语句执行顺序如下:
T2-->;pthread_mutex_lock(&mutex_curnum);
T2-->;while(curnum)
T2-->; pthread_cond_wait(&cond_curnum,&mutex_curnum);/*T2解锁,睡眠,等信号*/
T1-->;pthread_mutex_lock(&mutex_curnum); /*轮T1运行,T1上锁*/
T1-->;if (!-curnum) /*条件成立*/
T1-->; pthread_cond_signal(&cond_curnum); /*T1向线程T2发信号*/
T2-->;pthread_cond_wait(&cond_curnum,&mutex_curnum); /*T1时间片用完,换T2执行,但发觉不能上锁,因为T1持有锁*/
T1-->;pthread_mutex_unlock(&mutex_curnum); /*T1解锁*/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
问题在于一个条件变量和一个互斥锁关联,
一个线程在持有锁的情况下调用pthread_cond_signal(),
则等待条件的线程有可能得不到锁。
297

被折叠的 条评论
为什么被折叠?



