#include <pthread.h>
#include <stdio.h>
int sum0 = 0, sum1 = 0, sum2 = 0;
pthread_t thread[2];
pthread_barrier_t barr;
int randNum(int from, int to)
{
return from + (rand() % (to - from + 1));
}
void *func(void* p)
{
int arr[5];
int num = (int)(p);
if (num == 0) {
for (int i = 0; i < 5; i++)
arr[i] = randNum(0, 10); //i + 1; //{1, 2, 3, 4, 5};
}
if (num == 1) {
for (int i = 0; i < 5; i++)
arr[i] = randNum(0, 10); //i + 3; //{3, 4, 5, 6, 7};
}
if (num == 2) {
for (int i = 0; i < 5; i++)
arr[i] = randNum(0, 10); //i + 5; //{5, 6, 7, 8, 9};
}
for (int i = 0; i < 5; i++)
{
if (num == 0) {
sum0 += arr[i];
}
if (num == 1) {
sum1 += arr[i];
}
if (num == 2) {
sum2 += arr[i];
}
}
if (num == 0)
printf("Имеем №1 %d \n", sum0);
if (num == 1)
printf("Имеем №2 %d \n", sum1);
if (num == 2)
printf("Имеем №3 %d \n", sum2);
while (sum0 != sum1 || sum1 != sum2) {
pthread_barrier_wait(&barr);
if (num == 0) {
if (sum0 > sum1) {
sum0--;
arr[0]--;
}
if (sum0 < sum1) {
sum0++;
arr[0]++;
}
}
if (num == 2) {
if (sum2 > sum1) {
sum2--;
arr[2]--;
}
if (sum2 < sum1) {
sum2++;
arr[2]++;
}
}
if (num == 1) {
if (sum1 > sum0 || sum1 < sum0 || sum1 > sum2 || sum1 < sum2) {
int r = randNum(0, 1);
if (r == 0) {
sum1++;
arr[1]++;
}
else {
sum1--;
arr[1]--;
}
}
}
pthread_barrier_wait(&barr);
if (num == 0)
printf("Поменяли №1 %d \n", sum0);
if (num == 1)
printf("Поменяли №2 %d \n", sum1);
if (num == 2)
printf("Поменяли №3 %d \n", sum2);
pthread_barrier_wait(&barr);
}
pthread_barrier_wait(&barr);
if (num == 0)
printf("Результат №1 %d \n", sum0);
if (num == 1)
printf("Результат №2 %d \n", sum1);
if (num == 2)
printf("Результат №3 %d \n", sum2);
pthread_barrier_wait(&barr);
return NULL;
}
int main()
{
pthread_barrier_init(&barr, NULL, 3);
pthread_create(&thread[0], NULL, func, (void *)0);
pthread_create(&thread[1], NULL, func, (void *)1);
func((void*)2);
return 0;
}