Многопоточность - синхронизация - lock - C#

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

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

Изучаю многопоточность, дошел до синхронизация и не могу понять как использовать

lock

, вот делаю программу для теста

lock

:
using System;
using System.Threading;
 
class testClass
{
    public int I;
    public string STR;
    private object lockON = new object();
 
    public void Fun()
    {
        Console.WriteLine();
        lock (lockON)
        {
            for (; I < 100; I++ )
            Console.WriteLine("{1} = {0}", I, STR);                        
        }
    }
 
    public testClass(string rhs) { STR = rhs; I = 0; }
}
 
class ClassToTestCSHARP {   static void Main()  {
 
testClass ob1 = new testClass("ONE");
testClass ob2 = new testClass("TWO");
 
Thread ff = new Thread(ob1.Fun);
Thread sf = new Thread(ob2.Fun);
 
ff.Start();
sf.Start();
 
Console.ReadKey();  }   }
смысл программы, класс, в нем всего один метод (

Fun

), который запускает счетчик и выводит значения, в

Main

я создаю два объекта этого класса, создаю потоки, и запускаю эти потоки, по моему разумению, как только первый запущенный поток дойдет до до этого метода, в частности до ключевого слова

lock

, второй поток будет заблокирован, т.е. в итоге сначала один поток (

ONE

) выведет все свои значения, потом следующий (

TWO

), но так не происходит, все выводится вперемешку. В чем косяк, где и что я не правильно понял?

Решение задачи: «Многопоточность - синхронизация - lock»

textual
Листинг программы
testClass ob1 = new testClass("ONE");
 
Thread ff = new Thread(ob1.Fun);
Thread sf = new Thread(ob1.Fun);
 
ff.Start();
sf.Start();

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


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

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

10   голосов , оценка 4.2 из 5