#include #include #include int const arrSize = 20; //для обмена информацией между потоками //первый поток записывает результат в М0, второй в М1 int M0; int M1; pthread_barrier_t barr ; //барьер pthread_t mythread ; //идентификатор для дочернего потока pthread_mutex_t mutex ; // мьютекс для синхронизации вывода // Генератор массива void RndArray (int *A, int size) { for(int i = 0; i < size; i++) { A[i] = rand() % 3 + 1; } } // Вывод массива void OutArray (int *A, int size) { for(int i = 0; i < size; i++) { std::cout << A[i] << " "; } std:: cout << "\n"; } //стартовая функция void* func(void *param) { int p = *((int*)param); int Array[arrSize] ; //собственный массив потока RndArray(Array, arrSize); // инициализация числами от 1 до 3 // Согласование вывода данных pthread_mutex_lock(&mutex) ; //защита операции записи // Вывод результатов std::cout << "Source array. Thread " << p << ": "; OutArray(Array, arrSize); //конец критической секции pthread_mutex_unlock(&mutex); for (int i=0 ; i