Синхронизировать поток ключевым словом lock - C#

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

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

Есть задание, чтобы программа напоминала что-то вроде турникета, где пассажиры бы становились в очередь, бросали монетку(жетон) проходили через турникет, за каждым пассажиром турникет закрывается. В качестве подсказки нам сказали, что нужно синхронизировать поток с помощью ключевого слова lock. Но тот код что я написал и так выводит все в нужном порядке. Мог бы кто подсказать на моем примере, что я делаю не так...?
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Metro metro = new Metro();
  6. for (int i = 0; i < 5; i++)
  7. {
  8. Thread myThread = new Thread(metro.BecomeInQueue);
  9. myThread.Name = "Пассажир " + i.ToString();
  10. myThread.Start();
  11. }
  12. Console.ReadLine();
  13. }
  14. }
  15. /*static*/ class Metro
  16. {
  17. public /*static*/ void BecomeInQueue()
  18. {
  19. string[] go = new string[4] { "Стал в очередь", "Бросил монетку", "Прошел через турникет", "Турникет закрылся" };
  20. for (int i = 0; i < go.Length; i++)
  21. Console.WriteLine($"{Thread.CurrentThread.Name}: {go[i]}");
  22. }
  23. }

Решение задачи: «Синхронизировать поток ключевым словом lock»

textual
Листинг программы
  1.         static object _lock = new object();
  2.         public static void BecomeInQueue()
  3.         {
  4.             var go = new string[4] { "Стал в очередь", "Бросил монетку", "Прошел через турникет", "Турникет закрылся" };
  5.             var random = new Random(Environment.TickCount + System.Threading.Thread.CurrentThread.ManagedThreadId);
  6.             System.Threading.Thread.Sleep(random.Next(500));
  7.             Console.WriteLine($@"{DateTime.Now.TimeOfDay} : {System.Threading.Thread.CurrentThread.Name}: {go[0]}");
  8.             System.Threading.Thread.Sleep(random.Next(100));
  9.             lock (_lock)
  10.             {
  11.                 for (var i = 1; i < go.Length; i++)
  12.                 {
  13.                     Console.WriteLine($@"{DateTime.Now.TimeOfDay} :{System.Threading.Thread.CurrentThread.Name}: {go[i]}");
  14.                 }
  15.             }          
  16.         }

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


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

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

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

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

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

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