The problem that I want to find is written in paragraph No. 7. Prior to this, I describe the structure of my code.
- From
main()created and initialized two streams thread1 and thread2 with two functions fun1()and fun2(), respectively. - I have named mutex
lock_mutexand condition variables named cond1, cond2, cond3andcond4. - I have a global logical variables
var1, var2, var3and var4all initialized to false. fun1() as follows:
void fun1(){
while(1){
pthread_mutex_lock(&lock_mutex);
while(var1 is false)
pthread_cond_wait(&cond1,&lock_mutex);
set var3 = true;
pthread_cond_signal(&cond3);
set var1=false;
pthread_mutex_unlock(&lock_mutex);
}
}
fun2() as follows:
void fun2(){
while(1){
pthread_mutex_lock(&lock_mutex);
while(var2 is false)
pthread_cond_wait(&cond2,&lock_mutex);
set var4 = true;
pthread_cond_signal(&cond4);
set var2=false;
pthread_mutex_unlock(&lock_mutex);
}
}
- In my code there are functions that contain
lock_mutex, perform some work and signals cond1and cond2, if necessary, for example (each of them is a separate function):
function A:
pthread_mutex_lock(&lock_mutex);
//do some work
set var1= true;
pthread_cond_signal(&cond1);
pthread_mutex_unlock(&lock_mutex);
function 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, , .
. - / , .
.