Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
1

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

02.10.2013, 12:52. Показов 2049. Ответов 3
Метки нет (Все метки)

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

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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), но так не происходит, все выводится вперемешку.

В чем косяк, где и что я не правильно понял?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2013, 12:52
Ответы с готовыми решениями:

Lock не работает (многопоточность)
Здравствуйте. Есть такой код. namespace mysync { class Program { static void...

Многопоточность, чтение переменной, несколько lock
Смотрите, есть переменная, ее изменение происходит с помощью lock int count = 0; // ... lock...

Многопоточность и их синхронизация, нужны примеры реализации
Начал разбираться с потоками (читаю шилдт C# 4.0), никак не могу разобраться с этими потоками. ...

Многопоточность, оператор Lock
У одном обучающем видеоролике, парень обьясняет что чтобы по частям среда не читала код из потока,...

3
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
02.10.2013, 13:00 2
Цитата Сообщение от VLK Посмотреть сообщение
В чем косяк
Блок lock выполняется одновременно только одним потоком из всех, которые лочатся на объекте, указанном в скобках. Остальные потоки ждут.
У вас для каждого экземпляра testClass создается индивидуальный объект lockOn, в результате все экземпляры лочатся на разных объектах, что не приводит к блокировке.
Сделайте lockOn static, например, и увидите разницу.

Как вариант, запустите несколько потоков на выполнение метода Fun одного и того же объекта:
C#
1
2
3
4
5
6
7
testClass ob1 = new testClass("ONE");
 
Thread ff = new Thread(ob1.Fun);
Thread sf = new Thread(ob1.Fun);
 
ff.Start();
sf.Start();
1
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
02.10.2013, 13:19  [ТС] 3
т.е. правильно я понимаю, те потоки которые я хочу синхронизировать, у них должен быть один общий объект lockON ?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
02.10.2013, 13:27 4
Цитата Сообщение от VLK Посмотреть сообщение
те потоки которые я хочу синхронизировать, у них должен быть один общий объект lockON ?
Я бы сказал иначе: те методы, которые лочатся на общем lockOn, будут синхронизированы в разных потоках.
1
02.10.2013, 13:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2013, 13:27
Помогаю со студенческими работами здесь

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK,...

Acer aspire 5552G-N974G64Mikk Проблема с Caps Lock, Num Lock, Scroll Lock
Вообщем у меня такая же проблемма https://www.cyberforum.ru/notebooks/thread552722.html ...

Клавиатура мигает всеми тремя индикаторами Caps Lock, Scroll Lock и Num Lock и соответственно не работает!
Здравствуйте парни и девушки! Столкнулся с такой проблемой! Имеется клавиатура Genius Ergomedia...

Многопоточность и синхронизация
Не могу разобраться с синхронизацией, много гуглил в яндексе, там ничего особо понятного не набрел,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru