using
System;
using
System.Threading;
public
class
MatrixMultiplication
{
static
readonly
int
MAX = 4;
static
readonly
int
MAX_THREAD = 4;
static
int
[,] matA =
new
int
[MAX, MAX];
static
int
[,] matB =
new
int
[MAX, MAX];
static
int
[,] matC =
new
int
[MAX, MAX];
static
int
step_i = 0;
class
Worker
{
int
i;
public
Worker(
int
i)
{
this
.i = i;
}
public
void
Run()
{
for
(
int
j = 0; j < MAX; j++)
{
for
(
int
k = 0; k < MAX; k++)
{
matC[i, j] += matA[i, k] * matB[k, j];
}
}
}
}
public
static
void
Main(
string
[] args)
{
Random rand =
new
Random();
for
(
int
i = 0; i < MAX; i++)
{
for
(
int
j = 0; j < MAX; j++)
{
matA[i, j] = rand.Next(10);
matB[i, j] = rand.Next(10);
}
}
Console.WriteLine(
"Matrix A"
);
for
(
int
i = 0; i < MAX; i++)
{
for
(
int
j = 0; j < MAX; j++)
{
Console.Write(matA[i, j] +
" "
);
}
Console.WriteLine();
}
Console.WriteLine(
"Matrix B"
);
for
(
int
i = 0; i < MAX; i++)
{
for
(
int
j = 0; j < MAX; j++)
{
Console.Write(matB[i, j] +
" "
);
}
Console.WriteLine();
}
Thread[] threads =
new
Thread[MAX_THREAD];
for
(
int
i = 0; i < MAX_THREAD; i++)
{
threads[i] =
new
Thread(
new
Worker(step_i++).Run);
threads[i].Start();
}
for
(
int
i = 0; i < MAX_THREAD; i++)
{
threads[i].Join();
}
Console.WriteLine(
"Multiplication of A and B"
);
for
(
int
i = 0; i < MAX; i++)
{
for
(
int
j = 0; j < MAX; j++)
{
Console.Write(matC[i, j] +
" "
);
}
Console.WriteLine();
}
}
}