Передача данных между нитями - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д