我需要寻求帮助的问题写在第七点。在此之前,我会描述我的代码结构。
- From
main()
, two threads thread1 and thread2 are created and initialized to two functionsfun1()
andfun2()
respectively. - I have a mutex named
lock_mutex
and condition variables namedcond1
,cond2
,cond3
andcond4.
- I have global boolean variables
var1
,var2
,var3
andvar4
all initialized to false. fun1()
is like the following: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()
is as following: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); } }
- There are functions in my code which hold
lock_mutex
, do some work and signalcond1
andcond2
when appropriate, like this (each is a separate function):
函数 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重复触发。我希望每次它们被触发时都能调用函数C和函数D。
但是,fun1()
和 fun2()
只在第一次唤醒时被唤醒。之后,它们进入 while 循环,获取锁并无限期等待信号,尽管已经发出信号但不会被唤醒。
我无法理解这个问题的原因,并将非常感谢任何建议。如果有关于此类程序的好的调试技术/工具,请也指引给我。
提前致以感谢。