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

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

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

Студворк — интернет-сервис помощи студентам
Изучаю многопоточность, дошел до синхронизация и не могу понять как использовать 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2013, 12:52
Ответы с готовыми решениями:

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

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

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

3
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.10.2013, 13:00
Цитата Сообщение от 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
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
02.10.2013, 13:19  [ТС]
т.е. правильно я понимаю, те потоки которые я хочу синхронизировать, у них должен быть один общий объект lockON ?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.10.2013, 13:27
Цитата Сообщение от VLK Посмотреть сообщение
те потоки которые я хочу синхронизировать, у них должен быть один общий объект lockON ?
Я бы сказал иначе: те методы, которые лочатся на общем lockOn, будут синхронизированы в разных потоках.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2013, 13:27
Помогаю со студенческими работами здесь

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

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL 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 700! Так вот. Начал замечать интересную...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru