Обработка одного массива несколькими потоками - C#

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

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

Здравствуйте, имеется следующий код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. namespace TestConsoleApp
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. ThreadStart testThread1Start = new ThreadStart(new Program().testThread1);
  13. ThreadStart testThread2Start = new ThreadStart(new Program().testThread2);
  14. Thread[] testThread = new Thread[2];
  15. testThread[0] = new Thread(testThread1Start);
  16. testThread[1] = new Thread(testThread2Start);
  17. foreach (Thread myThread in testThread)
  18. {
  19. myThread.Start();
  20. }
  21. Console.ReadLine();
  22. }
  23. public void testThread1()
  24. {
  25. //executing in thread
  26. int count = 0;
  27. while (count++ < 10)
  28. {
  29. Console.WriteLine("Thread 1 Executed "+count+" times");
  30. Thread.Sleep(1);
  31. }
  32. }
  33. public void testThread2()
  34. {
  35. //executing in thread
  36. int count = 0;
  37. while (count++ < 10)
  38. {
  39. Console.WriteLine("Thread 2 Executed " + count + " times");
  40. Thread.Sleep(1);
  41. }
  42. }
  43. }
  44. }
В примере каждый из двоих потоков обрабатывает массив от 1 до 10 (то есть оба потока обрабатывают каждое число). Каким образом сделать чтобы каждый поток обрабатывал один и тот же массив (к примеру первый поток:1, второй поток:2, первый поток:3, второй поток:4 и т.д.). Требуется для сравнения кол-ва времени, которое нужно для обработки одного массива 2-10 потоками. И еще - каким образом сделать вывод "за сколько времени" каждый поток полностью выполнил обработку, и сколько времени было потрачено обработки всего массива?

Решение задачи: «Обработка одного массива несколькими потоками»

textual
Листинг программы
  1. using System;
  2. using System.Threading;
  3. using System.Diagnostics;
  4.  
  5. namespace TestConsoleApp
  6. {
  7.     class Program
  8.     {
  9.         static int[] ar = {0,1,2,3,4,5,6,7,8,9};
  10.         static int _lock = 0;
  11.         static void Main(string[] args)
  12.         {
  13.             ThreadStart testThread1Start = new ThreadStart(new Program().testThread1);
  14.             ThreadStart testThread2Start = new ThreadStart(new Program().testThread2);
  15.  
  16.             Thread[] testThread = new Thread[2];
  17.             testThread[0] = new Thread(testThread1Start);
  18.             testThread[1] = new Thread(testThread2Start);
  19.  
  20.             foreach (Thread myThread in testThread)
  21.             {
  22.                 myThread.Start();
  23.             }
  24.  
  25.             Console.ReadLine();
  26.         }
  27.  
  28.         public void testThread1()
  29.         {
  30.             Stopwatch sw1 = new Stopwatch();
  31.             sw1.Start();
  32.             Thread.Sleep(101);
  33.             while (_lock < 10)
  34.             {
  35.                 Console.WriteLine("Thread 1 Executed value {0}", GetNext());
  36.                 Thread.Sleep(1);
  37.             }
  38.             sw1.Stop();
  39.             TimeSpan ts = sw1.Elapsed;
  40.  
  41.             // Format and display the TimeSpan value.
  42.             string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
  43.                 ts.Hours, ts.Minutes, ts.Seconds,
  44.                 ts.Milliseconds / 10);
  45.             Console.WriteLine("RunTime Thread 1 {0}", elapsedTime);
  46.         }
  47.  
  48.         public void testThread2()
  49.         {
  50.             Stopwatch sw2 = new Stopwatch();
  51.             sw2.Start();
  52.             Thread.Sleep(100);
  53.             while (_lock < 10)
  54.             {
  55.                 Console.WriteLine("Thread 2 Executed value {0}", GetNext());
  56.                 Thread.Sleep(1);
  57.             }
  58.             sw2.Stop();
  59.             TimeSpan ts = sw2.Elapsed;
  60.  
  61.             // Format and display the TimeSpan value.
  62.             string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
  63.                 ts.Hours, ts.Minutes, ts.Seconds,
  64.                 ts.Milliseconds / 10);
  65.             Console.WriteLine("RunTime Thread 2 {0}", elapsedTime);
  66.  
  67.         }
  68.  
  69.         static int GetNext()
  70.         {
  71.             int a = ar[_lock];
  72.             _lock += 1;
  73.             return a;
  74.         }
  75.     }
  76. }

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


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

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

9   голосов , оценка 3.889 из 5

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

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

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