Lock не работает (многопоточность) - C#

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

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

Здравствуйте. Есть такой код.
Листинг программы
  1. namespace mysync
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. M m1 = new M("Поток номер 1");
  8. M m2 = new M("Поток номер 2");
  9. Console.ReadKey();
  10. }
  11. }
  12. class M
  13. {
  14. public Thread t;
  15. string Name;
  16. Test test = new Test();
  17. public M(string Name)
  18. {
  19. this.Name = Name;
  20. t = new Thread(Run);
  21. t.Start();
  22. }
  23. object ob = new object();
  24. void Run()
  25. {
  26. lock (ob)
  27. {
  28. test.Method(this.Name);
  29. }
  30. }
  31. }
  32. class Test
  33. {
  34. private object ob = new object();
  35. public void Method(object Name)
  36. {
  37. lock (ob)
  38. {
  39. Console.WriteLine("Выполнения метода в классе Test методом " + Name);
  40. for (int i = 0; i < 10; i++)
  41. {
  42. Thread.Sleep(500);
  43. Console.WriteLine("Выполнение потока " + Name + " номер " + i);
  44. }
  45. Console.WriteLine("Поток " + Name+ " завершен");
  46. }
  47. }
  48. }
  49. }
на выходе он выдает это (пикчу прикрепил) Хотя, насколько я понимаю, он должен выдавать "Выполнение потока Поток номер 1 номер 0 Выполнение потока Поток номер 1 номер 1 ... Выполнение потока Поток номер 1 номер 9 и так же со вторым потоком. В общем вопрос - что в моем коде не так, почему потоки так же работают "вместе", а не "по очереди"?

Решение задачи: «Lock не работает (многопоточность)»

textual
Листинг программы
  1. private static object ob = new object();

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


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

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

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

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

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

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