Синхронизировать поток ключевым словом lock - C#
Формулировка задачи:
Есть задание, чтобы программа напоминала что-то вроде турникета, где пассажиры бы становились в очередь, бросали монетку(жетон) проходили через турникет, за каждым пассажиром турникет закрывается.
В качестве подсказки нам сказали, что нужно синхронизировать поток с помощью ключевого слова lock. Но тот код что я написал и так выводит все в нужном порядке. Мог бы кто подсказать на моем примере, что я делаю не так...?
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- Metro metro = new Metro();
- for (int i = 0; i < 5; i++)
- {
- Thread myThread = new Thread(metro.BecomeInQueue);
- myThread.Name = "Пассажир " + i.ToString();
- myThread.Start();
- }
- Console.ReadLine();
- }
- }
- /*static*/ class Metro
- {
- public /*static*/ void BecomeInQueue()
- {
- string[] go = new string[4] { "Стал в очередь", "Бросил монетку", "Прошел через турникет", "Турникет закрылся" };
- for (int i = 0; i < go.Length; i++)
- Console.WriteLine($"{Thread.CurrentThread.Name}: {go[i]}");
- }
- }
Решение задачи: «Синхронизировать поток ключевым словом lock»
textual
Листинг программы
- static object _lock = new object();
- public static void BecomeInQueue()
- {
- var go = new string[4] { "Стал в очередь", "Бросил монетку", "Прошел через турникет", "Турникет закрылся" };
- var random = new Random(Environment.TickCount + System.Threading.Thread.CurrentThread.ManagedThreadId);
- System.Threading.Thread.Sleep(random.Next(500));
- Console.WriteLine($@"{DateTime.Now.TimeOfDay} : {System.Threading.Thread.CurrentThread.Name}: {go[0]}");
- System.Threading.Thread.Sleep(random.Next(100));
- lock (_lock)
- {
- for (var i = 1; i < go.Length; i++)
- {
- Console.WriteLine($@"{DateTime.Now.TimeOfDay} :{System.Threading.Thread.CurrentThread.Name}: {go[i]}");
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д