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

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

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

Здравствуйте. Есть такой код.
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+ " завершен");
            }
        }
    }
}
на выходе он выдает это (пикчу прикрепил) Хотя, насколько я понимаю, он должен выдавать "Выполнение потока Поток номер 1 номер 0 Выполнение потока Поток номер 1 номер 1 ... Выполнение потока Поток номер 1 номер 9 и так же со вторым потоком. В общем вопрос - что в моем коде не так, почему потоки так же работают "вместе", а не "по очереди"?

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

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

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


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

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

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