Передача данных между нитями - C#

Узнай цену своей работы

Формулировка задачи:

Разработать программу, в которой использовать три дополнительные нити – Н1, Н2 и Н3. Нить Н1 в цикле формирует и печатает массив 10 случайных чисел в диапазоне от минус 40 до 40 и передает его нитям Н2 и Н3. Нить Н2 сортирует только положительные элементы массива и печатает новый массив. Нить Н3 сортирует только отрицательные элементы массива и печатает новый массив.

Решение задачи: «Передача данных между нитями»

textual
Листинг программы
  1. using System;
  2. using System.Threading;
  3. using System.Linq;
  4.  
  5. class Program
  6. {
  7.     int[] _arr;
  8.     static Random _rnd = new Random();
  9.  
  10.     static Semaphore _pool;
  11.     static int _coun = 1;
  12.  
  13.     static void Main()
  14.     {
  15.         Program p = new Program();
  16.  
  17.         Thread h1 = new Thread(() =>
  18.         {
  19.             _pool.WaitOne();
  20.             Console.WriteLine("h1");
  21.  
  22.             p._arr = new int[10];
  23.  
  24.             Thread.Sleep(1000);
  25.  
  26.             for (int i = 0; i < p._arr.Length; i++)
  27.             {
  28.                 p._arr[i] = _rnd.Next(-40, 41);
  29.             }
  30.  
  31.             Console.WriteLine(string.Join(" ", p._arr));
  32.             Interlocked.Increment(ref _coun);
  33.  
  34.             _pool.Release();
  35.         });
  36.  
  37.         Thread h2 = new Thread(() =>
  38.         {
  39.             _pool.WaitOne();
  40.             Console.WriteLine("h2");
  41.  
  42.             p._arr = p._arr.OrderBy(n => n > 0).ToArray();
  43.  
  44.             Console.WriteLine(string.Join(" ", p._arr));
  45.  
  46.             _pool.Release();
  47.         });
  48.  
  49.         Thread h3 = new Thread(() =>
  50.         {
  51.             _pool.WaitOne();
  52.             Console.WriteLine("h3");
  53.  
  54.             p._arr = p._arr.OrderBy(n => n < 0).ToArray();
  55.  
  56.             Console.WriteLine(string.Join(" ", p._arr));
  57.  
  58.             _pool.Release();
  59.         });
  60.  
  61.         _pool = new Semaphore(_coun, 3, "Semaphore");
  62.  
  63.         h1.Start();
  64.         h2.Start();
  65.         h3.Start();
  66.  
  67.         h1.Join();
  68.         h2.Join();
  69.         h3.Join();
  70.  
  71.         Console.ReadKey();
  72.     }
  73. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы