#include #include int sum0 = 0, sum1 = 0, sum2 = 0; pthread_t thread[2]; pthread_barrier_t barr; void *func(void* p) { int arr[5]; int num = (int)(p); if (num == 0) { for (int i = 0; i < 5; i++) arr[i] = i + 1; //{1, 2, 3, 4, 5}; } if (num == 1) { for (int i = 0; i < 5; i++) arr[i] = i + 3; //{3, 4, 5, 6, 7}; } if (num == 2) { for (int i = 0; i < 5; i++) arr[i] = 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]; } } pthread_barrier_wait(&barr); while (sum0 != sum1 && sum1 != sum2) { printf("Имеем №1 %d №2 %d №3 %d\n", sum0, 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]++; } } pthread_barrier_wait(&barr); printf("Поменяли\n"); pthread_barrier_wait(&barr); } pthread_barrier_wait(&barr); printf("Результат №1 %d №2 %d №3 %d\n", sum0, sum1, sum2); 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*)1); func((void*)2); return 0; }