Передача данных между нитями - C#
Формулировка задачи:
Разработать программу, в которой использовать три дополнительные нити – Н1, Н2 и Н3. Нить Н1 в цикле формирует и печатает массив 10 случайных чисел в диапазоне от минус 40 до 40 и передает его нитям Н2 и Н3. Нить Н2 сортирует только положительные элементы массива и печатает новый массив. Нить Н3 сортирует только отрицательные элементы массива и печатает новый массив.
Решение задачи: «Передача данных между нитями»
textual
Листинг программы
using System;
using System.Threading;
using System.Linq;
class Program
{
int[] _arr;
static Random _rnd = new Random();
static Semaphore _pool;
static int _coun = 1;
static void Main()
{
Program p = new Program();
Thread h1 = new Thread(() =>
{
_pool.WaitOne();
Console.WriteLine("h1");
p._arr = new int[10];
Thread.Sleep(1000);
for (int i = 0; i < p._arr.Length; i++)
{
p._arr[i] = _rnd.Next(-40, 41);
}
Console.WriteLine(string.Join(" ", p._arr));
Interlocked.Increment(ref _coun);
_pool.Release();
});
Thread h2 = new Thread(() =>
{
_pool.WaitOne();
Console.WriteLine("h2");
p._arr = p._arr.OrderBy(n => n > 0).ToArray();
Console.WriteLine(string.Join(" ", p._arr));
_pool.Release();
});
Thread h3 = new Thread(() =>
{
_pool.WaitOne();
Console.WriteLine("h3");
p._arr = p._arr.OrderBy(n => n < 0).ToArray();
Console.WriteLine(string.Join(" ", p._arr));
_pool.Release();
});
_pool = new Semaphore(_coun, 3, "Semaphore");
h1.Start();
h2.Start();
h3.Start();
h1.Join();
h2.Join();
h3.Join();
Console.ReadKey();
}
}