Синхронизировать три нити одного процесса с помощью оператора lock - C#
Формулировка задачи:
Синхронизировать три нити одного процесса с помощью оператора
lock. Каждая нить формирует 5 чисел для одноименной строки матрицы 3х5.
Числа первой нити формируются в диапазоне от 10 до 19, второй нити – от
20 до 29 и третьей нити – от 30 до 39. Процесс управляет всеми нитями и
выводит на экран результат их работы.
Решение задачи: «Синхронизировать три нити одного процесса с помощью оператора lock»
textual
Листинг программы
void Main()
{
var matrix = new int[3, 5];
var random = new Random();
var threads = new List<Thread>();
threads.Add(new Thread(() => Generate(matrix, 0, 10, 20, random)));
threads.Add(new Thread(() => Generate(matrix, 1, 20, 30, random)));
threads.Add(new Thread(() => Generate(matrix, 2, 30, 40, random)));
foreach (var thread in threads)
thread.Start();
foreach (var thread in threads)
thread.Join();
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
Console.Write($"{matrix[i, j],4}");
Console.WriteLine();
}
}
void Generate(int[,] matrix, int row, int min, int max, Random random)
{
for (int j = 0; j < matrix.GetLength(1); j++)
lock (matrix.SyncRoot)
matrix[row, j] = random.Next(min, max);
}