Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 386

Блокировка

01.03.2019, 18:50. Показов 2505. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите, пожалуйста, почему для блокировки нужно использовать объект, а не число типа int например? Это из за того, что бы не допустить блокировки из внешнего кода? И выполняет ли метод Thread.Sleep блокировку и разблокировку текущего потока?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2019, 18:50
Ответы с готовыми решениями:

Блокировка в потоке
Имеется некий класс с кодом. Создаю несколько потоков. После запуска программы в коде сериализации строке создания файла появляется...

Многопоточность и их блокировка
Собственно создаю 80 потоков которые бегут по листу с текстом и каждое слово добавляет в RichBox на форму. Для синхронизации использую...

Блокировка клавиатуры
Год тому назад когда был урок информатике там было программа при запуске блокируется клава папки с рабочего стала исчезают и панель задач...

7
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.03.2019, 19:57
Лучший ответ Сообщение было отмечено HitGirl как решение

Решение

Цитата Сообщение от HitGirl Посмотреть сообщение
Подскажите, пожалуйста, почему для блокировки нужно использовать объект, а не число типа int например?
Если вы про оператор lock, то ему нужен ссылочный тип, а int - не ссылочный.
А ссылочный тип нужен для того, чтобы несколько операторов lock работали с одним и тем же объектом синхронизации. Для структурных типов это невозможно - в каждом методе они свои.
Цитата Сообщение от HitGirl Посмотреть сообщение
И выполняет ли метод Thread.Sleep блокировку и разблокировку текущего потока?
Вопрос не понятен. Если вы про блокировку в смысле lock - то нет, не выполняет.
2
23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 386
01.03.2019, 20:22  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
несколько операторов lock работали с одним и тем же объектом синхронизации
Чтобы они работали с одним и тем же объектом синхронизации, в операторе lock сравниваются ссылки переданных объектов? Не проще ли сравнить два числа типа int и не создавать дополнительные объекты?
C#
1
2
lock(obj){}
lock(10) {}
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.03.2019, 20:54
Лучший ответ Сообщение было отмечено HitGirl как решение

Решение

Цитата Сообщение от HitGirl Посмотреть сообщение
Не проще ли сравнить два числа типа int и не создавать дополнительные объекты?
Нет, конечно.
Вот вы используете значение 10. Вы точно уверены, что больше никто, никогда и нигде не додумался использоваться это же самое значение? В реализации классов .NET? В подключенных сторонних библиотеках?
Это ведь может наглухо повесить приложение.
А new object() — он ваш, собственный, никто кроме вас его больше гарантированно использовать не будет.
По той же причине не рекомендуется синхронизироваться на this — чтобы не попасть в ситуацию, когда объект синхронизации уходит из-под вашего контроля.
2
13 / 8 / 5
Регистрация: 27.02.2019
Сообщений: 25
02.03.2019, 23:04
C#
1
Чтобы они работали с одним и тем же объектом синхронизации, в операторе lock сравниваются ссылки переданных объектов? Не проще ли сравнить два числа типа int и не создавать дополнительные объекты?
Это не только не проще , а просто невозможно, lock не некоторая магия, а завуалированная под try finally функция monitor.Enter, Monitor.Exit , которая работает со специальным блоком/полем синхронизации у объектов, которого физически нет у значимых типов. Отсутствие этого поля опят таки связано со спецификкой использования различных типов в языке, объекты более "тяжеловесны" по сравнению со значимыми типами.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.03.2019, 23:53
Цитата Сообщение от Vanek239 Посмотреть сообщение
работает со специальным блоком/полем синхронизации у объектов, которого физически нет у значимых типов. Отсутствие этого поля опят таки связано со спецификкой использования различных типов в языке, объекты более "тяжеловесны" по сравнению со значимыми типами.
Вы описали просто деталь реализации правил языка в конкретной среде выполнения.

Спек языка позволяет реализовать синхронизацию как угодно, при условии наличия указанных ограничений на тип замыкаемого значения.
0
23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 386
03.03.2019, 09:15  [ТС]
Цитата Сообщение от Vanek239 Посмотреть сообщение
блоком/полем синхронизации у объектов
Как это поле называется? Его можно получить с помощью рефлексии?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
03.03.2019, 11:27
Цитата Сообщение от HitGirl Посмотреть сообщение
Как это поле называется? Его можно получить с помощью рефлексии?
Поле называется syncblk.
Это поле только для среды исполнения, для программиста к нему доступа нет.



Почитайте здесь https://habr.com/ru/post/263935/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2019, 11:27
Помогаю со студенческими работами здесь

Блокировка формы
Нужно на время выполнения метода заблокировать форму, чтобы нельзя было нажимать на кнопки. Я делалthis.Enabled=false; форма...

Блокировка клавиатуры в форме C#
Всем привет! Я уже сделал графический пароль, осталось блокировать клавиатуру дабы пользователь не нажал на кнопку Win или Alt+Ctrl+Del,...

Потоки из пула и блокировка
почему с потоками из пула не рекомендуется использовать блокировку? почему проседает производительность?

Блокировка при парсинге
Доброго времени суток. Вопрос. Парсю сайт, но через некоторое время меня блокируют на нем. Подскажите, может кто знает как избежать этого...

Блокировка диспетчера задач
как при входе в программу тоисть Form заблокировать диспетчер задач??


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
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. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru