Я пытаюсь понять понимание мьютексных замков.Я решаю математическое уравнение (a+b) * (c+d) / e
, используя три различных потока, а именно сложение, умножение и деление.Для начала я написал этот код.Я имел в виду, что поток дополнения должен запускаться первым, а все остальные потоки должны быть заблокированы, но он дает случайный вывод.Вот код, который я написал до сих пор.
#include <iostream>
#include <pthread.h>
using std::cout, std::endl;
pthread_mutex_t mutex1;
void *Division(void *arg_div)
{
int *input =(int *)arg_div;
int result = input[0]/input[1];
cout<<"Final result"<<endl;
cout << result ;
pthread_exit(NULL);
}
void *Multiplication(void *arg_mul)
{
int *input =(int *)arg_mul;
int arg1[2];
arg1[0]=input[0]*input[1];
arg1[1]=input[2];
cout<<"Multiplication results are"<<endl;
cout<<arg1[0];
cout<<arg1[1];
pthread_exit(NULL);
}
void *Addition(void *arg_add)
{
pthread_mutex_lock(&mutex1);
cout<<"Addition Thread is acquring lock"<<endl;
int *input =(int *)arg_add;
//my critical section
int arg[3];
arg[0]=input[0]+input[1];
arg[1]=input[2]+input[3];
pthread_mutex_unlock(&mutex1);
arg[2]=input[4];
cout<<"output of add function"<<endl;
cout<<arg[0]<<endl;
cout<<arg[1]<<endl;
cout<<arg[2]<<endl;
pthread_exit(NULL);
}
int main()
{
int values[5]={6,5,4,3,2};
pthread_t add;
pthread_t multiply;
pthread_t divide;
pthread_create(&add,NULL,Addition,(void*)values);
pthread_create(&multiply,NULL,Multiplication,(void*)values);
pthread_create(÷,NULL,Division,(void*)values);
pthread_join(add,NULL);
pthread_join(multiply,NULL);
pthread_join(divide,NULL);
return 0;
}
Я хочу, чтобы сначала выполнялся только дополнительный поток, затем поток умножения, а затем, наконец, деление.