Lock не работает (многопоточность) - C#
Формулировка задачи:
Здравствуйте. Есть такой код.
на выходе он выдает это (пикчу прикрепил)
Хотя, насколько я понимаю, он должен выдавать
"Выполнение потока Поток номер 1 номер 0
Выполнение потока Поток номер 1 номер 1
...
Выполнение потока Поток номер 1 номер 9
и так же со вторым потоком.
В общем вопрос - что в моем коде не так, почему потоки так же работают "вместе", а не "по очереди"?
Листинг программы
- namespace mysync
- {
- class Program
- {
- static void Main(string[] args)
- {
- M m1 = new M("Поток номер 1");
- M m2 = new M("Поток номер 2");
- Console.ReadKey();
- }
- }
- class M
- {
- public Thread t;
- string Name;
- Test test = new Test();
- public M(string Name)
- {
- this.Name = Name;
- t = new Thread(Run);
- t.Start();
- }
- object ob = new object();
- void Run()
- {
- lock (ob)
- {
- test.Method(this.Name);
- }
- }
- }
- class Test
- {
- private object ob = new object();
- public void Method(object Name)
- {
- lock (ob)
- {
- Console.WriteLine("Выполнения метода в классе Test методом " + Name);
- for (int i = 0; i < 10; i++)
- {
- Thread.Sleep(500);
- Console.WriteLine("Выполнение потока " + Name + " номер " + i);
- }
- Console.WriteLine("Поток " + Name+ " завершен");
- }
- }
- }
- }
Решение задачи: «Lock не работает (многопоточность)»
textual
Листинг программы
- private static object ob = new object();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д