【发布时间】:2011-03-05 15:56:44
【问题描述】:
我正在寻求帮助的问题写在第 1 点。 7. 在此之前,我描述一下我的代码结构。
- 从
main(),创建了两个线程thread1和thread2,并分别初始化为两个函数fun1()和fun2()。 - 我有一个名为
lock_mutex的互斥体和名为cond1、cond2、cond3和cond4.的条件变量 - 我将全局布尔变量
var1、var2、var3和var4都初始化为 false。 -
fun1()如下:void fun1(){ while(1){ pthread_mutex_lock(&lock_mutex); while(var1 is false) pthread_cond_wait(&cond1,&lock_mutex); //do some work set var3 = true; pthread_cond_signal(&cond3); set var1=false; pthread_mutex_unlock(&lock_mutex); } } -
fun2()如下:void fun2(){ while(1){ pthread_mutex_lock(&lock_mutex); while(var2 is false) pthread_cond_wait(&cond2,&lock_mutex); //do some work set var4 = true; pthread_cond_signal(&cond4); set var2=false; pthread_mutex_unlock(&lock_mutex); } } - 我的代码中有一些函数保存
lock_mutex,做一些工作并在适当的时候发出cond1和cond2的信号,就像这样(每个都是一个单独的函数):
功能A:
pthread_mutex_lock(&lock_mutex);
//do some work
set var1= true;
pthread_cond_signal(&cond1);
pthread_mutex_unlock(&lock_mutex);
功能B:
pthread_mutex_lock(&lock_mutex);
//do some work
set var2= true;
pthread_cond_signal(&cond2);
pthread_mutex_unlock(&lock_mutex);
函数 C:
pthread_mutex_lock(&lock_mutex)
//do some work
while(var3 is false)
pthread_cond_wait(&cond3,&lock_mutex);
//do more work
set var3=false;
pthread_mutex_unlock(&lock_mutex);
功能 D:
pthread_mutex_lock(&lock_mutex)
//do some work
while(var4 is false)
pthread_cond_wait(&cond4,&lock_mutex);
//do more work
set var4= false;
pthread_mutex_unlock(&lock_mutex);
7.fun1() 和 fun2() 由函数 A 和函数 B 重复发出信号。我希望 fun1() 和 fun2() 在每次发出信号时调用函数 C 和函数 D。
但是fun1() 和fun2() 只是第一次被唤醒。之后,它们进入while循环,获取锁并无限期等待信号,尽管有信号也不会唤醒。
我无法理解此问题的原因,非常感谢任何建议。如果有针对此类程序的任何好的调试技术/工具,也请向我介绍。
在此先感谢您。
【问题讨论】: