Не могу разобраться с работой потоков - C#

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

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

Сейчас изучаю работу потокв в C# Для меня основная польза от потоков - что можно работать быстрее,допустим чекер работает в 5 потоков в 5 раз быстрее и т.д Но я не мону разобраться с кое с чем.Допустим напишем простую программу,которая выводит в цикле числа до 500
Листинг программы
  1. class Program
  2. {
  3. static object threadLockers = new object();
  4. static void Main()
  5. {
  6. Thread t1 = new Thread(Func); //1 шаг - обьявляем поток
  7. t1.Start(); //2 шаг - запускам поток
  8. Thread t2 = new Thread(Func);
  9. t2.Start();
  10. }
  11. static void Func()
  12. {
  13. for (int i = 1; i < 501; i++)
  14. {
  15. lock(threadLockers)
  16. {
  17. Console.WriteLine(i);
  18. Thread.Sleep(100);
  19. }
  20. }
  21. Console.ReadLine();
  22. }
  23. }
Тогда программа будем выводить
Листинг программы
  1. 1
  2. 1
  3. 2
  4. 2
  5. 3
  6. 3
  7. и т.д
Я вроде как заблокировал через lock доступ,но один поток как бы не видит другой и работа не распределяеться тоесть надо чтобы первый поток выводил 1,а второй уже 2 и т.д я думаю мысль понятна,но не могу понять как это сделать

Решение задачи: «Не могу разобраться с работой потоков»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4.  
  5. namespace ConsoleApplication143
  6. {
  7.     internal class Program
  8.     {
  9.         private static void Main()
  10.         {
  11.             const int n = 5;
  12.             ThreadStart start = () =>
  13.                                 {
  14.                                     for (int i = 0; i < n; i++)
  15.                                         Console.WriteLine("{0} {1}", i, Thread.CurrentThread.ManagedThreadId);
  16.  
  17.                                 };
  18.             var rrs = new RobinRoundSheduler(2, start) {TimeForTask = new TimeSpan(1)};
  19.             rrs.Start();
  20.             Console.ReadKey();
  21.         }
  22.     }
  23.  
  24.  
  25.     internal class RobinRoundSheduler
  26.     {
  27.         private readonly LinkedList<Thread> _threads;
  28.         public TimeSpan TimeForTask { get; set; }
  29.  
  30.         public RobinRoundSheduler(int taskCount, ThreadStart start)
  31.         {
  32.             TimeForTask = TimeSpan.FromSeconds(1);
  33.             _threads = new LinkedList<Thread>();
  34.             for (int i = 0; i < taskCount; i++)
  35.             {
  36.                 _threads.AddLast(new Thread(start));
  37.             }
  38.         }
  39.  
  40.         public void Start()
  41.         {
  42.             while (_threads.Count > 0)
  43.             {
  44.                 var list = new List<Thread>();
  45.                 foreach (var thread in _threads)
  46.                 {
  47.                     lock (thread)
  48.                     {
  49.                         if (thread.ThreadState == ThreadState.Unstarted)
  50.                             thread.Start();
  51.                         else
  52.                             thread.Resume();
  53.                     }
  54.                     thread.Join(TimeForTask);
  55.                     lock (thread)
  56.                     {
  57.                         if (thread.ThreadState == ThreadState.Stopped || thread.ThreadState == ThreadState.Aborted)
  58.                             list.Add(thread);
  59.                         else
  60.                         {
  61.                             thread.Suspend();
  62.                         }
  63.                     }
  64.                 }
  65.                 list.ForEach(thread => _threads.Remove(thread));
  66.             }
  67.         }
  68.     }
  69. }

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


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

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

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

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

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

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