Многопоточность - синхронизация - 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д