Лабораторная 3
Возведение квадратной матрицы в степень.

Разработать программу параллельного рассчета произведения A*(A*(A*...)), где А - квадратная матрица размером NxN, количество множителей А в формуле равно P. Исходные данные для матрицы находятся в текстовом файле. Первая строка в файле содержит два натуральных числа через пробел: 300>N>1 и P>1. Последующие строки файла содержат набор вещественных значений через пробел - содержимое матрицы NxN.

Рассчет обеспечивать последовательным умножением в N потоках матрицы самой на себя в первом произведении и на промежуточную матрицу во всех последующих произведениях. Основная программа формирует, запускает, ожидает окончания работы N потоков и выводит результирующую матрицу на экран. I-й поток вычисляет I-ю строку промежуточной матрицы. По окончании вычисления строки каждый поток выводит информацию о данном факте и ожидает окончательного вычисления промежуточной матрицы другими потоками. По окончании формирования промежуточной матрицы производится вывод информации о данном факте, потоки разблокируются и начинают формирование следующей промежуточной матрицы. Процесс продложается до тех пор, пока рассчет не будет совершено P умножений.

Программа предполагает использование критических секций (мютексов) и событий.