namespace RVIP_Lab5
{
    public class Alg2
    {
        public int[,] Begin(int[,] matrix1, int[,] matrix2, int numThreads)
        {
            int rowsA = matrix1.GetLength(0);
            int columnsA = matrix1.GetLength(1);
            int rowsB = matrix2.GetLength(0);
            int columnsB = matrix2.GetLength(1);

            int[,] resultMatrix = new int[rowsA, columnsB];

            int rowsPerThread = rowsA / numThreads;

            Thread[] threads = new Thread[numThreads];

            for (int i = 0; i < numThreads; i++)
            {
                int startRow = i * rowsPerThread;
                int endRow = (i == numThreads - 1) ? rowsA : startRow + rowsPerThread;
                threads[i] = new Thread(() => MultiplyRows(startRow, endRow, matrix1, matrix2, resultMatrix));
                threads[i].Start();
            }

            foreach (Thread thread in threads)
            {
                thread.Join();
            }

            return resultMatrix;
        }

        static void MultiplyRows(int startRow, int endRow, int[,] matrixA, int[,] matrixB, int[,] resultMatrix)
        {
            for (int i = startRow; i < endRow; i++)
            {
                for (int j = 0; j < matrixB.GetLength(1); j++)
                {
                    int sum = 0;
                    for (int k = 0; k < matrixA.GetLength(1); k++)
                    {
                        sum += matrixA[i, k] * matrixB[k, j];
                    }
                    resultMatrix[i, j] = sum;
                }
            }
        }
    }
}
