Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Lock / 25 сообщений из 35, страница 1 из 2
08.11.2018, 11:41
    #39729847
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
В каноничных примерах ( тут или тут ) для блокировки числового поля используется дополнительный объект, а если поле объектное, то можно ли его самого в Lock воткнуть?
...
Рейтинг: 0 / 0
08.11.2018, 11:49
    #39729852
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Antonariy,

Блокируется кусок кода между скобками. Другой поток встанет на скобке и будет ждать.
...
Рейтинг: 0 / 0
08.11.2018, 11:58
    #39729861
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Antonariy,

можно, но не нужно, пару байт жалко?
лучше сделать поле с объектом синхронизации\блокировки private readonly, как мне кажется, в большинстве случаев
...
Рейтинг: 0 / 0
08.11.2018, 12:19
    #39729866
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
...
Рейтинг: 0 / 0
08.11.2018, 12:33
    #39729873
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Roman MejtesAntonariy,

можно, но не нужно, пару байт жалко?не мне. я сейчас работаю в таком месте, где докапываются даже до кошерного переноса =>

то есть

void xxx() =>
yyy();

не правильно, а

void xxx()
=> yyy();

правильно.

вот и насчет блокировки примерно такая же ерунда.
...
Рейтинг: 0 / 0
08.11.2018, 14:09
    #39729922
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Roman MejtesAntonariy,

можно, но не нужно, пару байт жалко?
лучше сделать поле с объектом синхронизации\блокировки private readonly, как мне кажется, в большинстве случаев
Это не пара байт, а прикручивание к каждому блокируемому объекту прилипалы
...
Рейтинг: 0 / 0
08.11.2018, 14:29
    #39729939
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
ViPRosRoman MejtesAntonariy,

можно, но не нужно, пару байт жалко?
лучше сделать поле с объектом синхронизации\блокировки private readonly, как мне кажется, в большинстве случаев
Это не пара байт, а прикручивание к каждому блокируемому объекту прилипалы
в процессе выполнения указатель может поменяться, а у private readonly object'а поля он гарантированно постоянный
...
Рейтинг: 0 / 0
08.11.2018, 15:02
    #39729969
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
AntonariyВ каноничных примерах ( тут или тут ) для блокировки числового поля используется дополнительный объект, а если поле объектное, то можно ли его самого в Lock воткнуть?
Все зависит от конкретной ситуации.
...
Рейтинг: 0 / 0
08.11.2018, 15:34
    #39729999
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Roman Mejtesв процессе выполнения указатель может поменяться, а у private readonly object'а поля он гарантированно постоянный
Неужто прямо у объекта под Lock поменяют указатель и при том не поменяют в таблице локов?
Дебилы что ли?
Где это написано?
...
Рейтинг: 0 / 0
08.11.2018, 18:59
    #39730104
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Antonariy для блокировки числового поля используется дополнительный объект, а если поле объектное, то можно ли его самого в Lock воткнуть?
использовать не блокирующую синхронизацию, локами из пушки по воробьям
...
Рейтинг: 0 / 0
08.11.2018, 20:28
    #39730119
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
...
Рейтинг: 0 / 0
08.11.2018, 20:40
    #39730121
mikron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Где-то в степи,

Интересный момент стоимость локов.
Если за ресурс нет конкуренции то лок в два раза медленней чем interlocked Exchange.
Если изменения затрагивают только одно машинное слово - то интрлок быстрее.
Но обычно всё же необходимы измененя в нескольких словах, и вот тут уже ситуация меняется: уже два интерлока медленнее (не быстрее) чем один лок потому что сбрасывают две линии прцессорного кэша.

Выбор оптимальной парадигмы для синхронизации очень не прост,
но обобщённо утверждать локи - пушка я бы не стал.
С учётом теннденций в ИТ к дешевизне с приемлемыми потерями в качестве - локи лучше.
Лучше медленно но верно чем быстро но иногда. :)
...
Рейтинг: 0 / 0
08.11.2018, 20:50
    #39730124
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
mikron,
согласен, сам грешу шлепнешь бывало synchronized и попер дальше, но залочить доступ к числовому полю, как то рука не поднимется даже всуе...
...
Рейтинг: 0 / 0
09.11.2018, 01:21
    #39730245
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
AntonariyВ каноничных примерах ( тут или тут ) для блокировки числового поля используется дополнительный объект, а если поле объектное, то можно ли его самого в Lock воткнуть?
Для таких типов, как в примере по первой ссылке (class Account), и, соответственно в таких методах (Debit/Credit), не заморачиваясь лочу сам объект (lock (this)), в более сложных типах иногда приходится использовать несколько мютексов (тогда, в соотв.методах lock (mutex1)/lock (mutex2)/lock (mutexN)). Для коллекций использую то что Сон Веры Павловны прописал - ICollection.SyncRoot (стоит лишь одного using-a System.Collections)
...
Рейтинг: 0 / 0
09.11.2018, 01:52
    #39730250
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Где-то в степино залочить доступ к числовому полю, как то рука не поднимется даже всуе...
а к локальной переменной в методе (как к самой потоконезащищенной сущности)?
...
Рейтинг: 0 / 0
09.11.2018, 04:55
    #39730256
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
LRГде-то в степино залочить доступ к числовому полю, как то рука не поднимется даже всуе...
а к локальной переменной в методе (как к самой потоконезащищенной сущности)?

У каждого потока (Thread) свой стэк выполнения, и соотв локальная переменная метода для каждого потока своя.
Во-вторых, компилятор может соптимизировать так, что локальной переменной не будет вовсе как объекта в памяти, к чему тогда лочить доступ?
...
Рейтинг: 0 / 0
09.11.2018, 10:41
    #39730349
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
LRГде-то в степино залочить доступ к числовому полю, как то рука не поднимется даже всуе...
а к локальной переменной в методе (как к самой потоконезащищенной сущности)?
все наоборот :)
...
Рейтинг: 0 / 0
09.11.2018, 11:04
    #39730378
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
PallarisLRпропущено...

а к локальной переменной в методе (как к самой потоконезащищенной сущности)?

У каждого потока (Thread) свой стэк выполнения, и соотв локальная переменная метода для каждого потока своя.
Во-вторых, компилятор может соптимизировать так, что локальной переменной не будет вовсе как объекта в памяти, к чему тогда лочить доступ?
Да, действительно, что-то не то ляпнул, виноват)) Но "залочить доступ к числовому полю" (type member) все же нужно, рука должна подниматься))
...
Рейтинг: 0 / 0
09.11.2018, 11:12
    #39730387
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
LRНо "залочить доступ к числовому полю" (type member) все же нужно, рука должна подниматься))если оно одинокое) то зачем?
...
Рейтинг: 0 / 0
09.11.2018, 11:23
    #39730403
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Petro123LRНо "залочить доступ к числовому полю" (type member) все же нужно, рука должна подниматься))если оно одинокое) то зачем?
теперь расшифруй поток ботосознания
...
Рейтинг: 0 / 0
09.11.2018, 12:33
    #39730486
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
ViPRosPetro123пропущено...
если оно одинокое) то зачем?
теперь расшифруй поток ботосознанияэллочке-людоедке зачем расшифровывать.
...
Рейтинг: 0 / 0
10.11.2018, 13:08
    #39731027
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
AntonariyВ каноничных примерах ( тут или тут ) для блокировки числового поля используется дополнительный объект, а если поле объектное, то можно ли его самого в Lock воткнуть?

Можно-то можно.
Но не нужно :)
...
Рейтинг: 0 / 0
13.11.2018, 17:42
    #39732598
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Распараллеливаю код, который разными функциями наполняет разные поля у записей в одной коллекции. Коллекция не меняется, потоки гарантированно не будут менять одни и те же поля, и даже тут пишут, что все ок: https://stackoverflow.com/questions/28641283/multiple-threads-accessing-a-single-object-but-without-data-contention-in-c-shar

Однако второй камент какой-то противоречивый. В первой части говорит, что хреновая идея тут потокобезопасность наворачивать, а во второй, что таки давайте.

А что МСДН по этому поводу говорит? Я не нашел ничего подходящего по смыслу.
...
Рейтинг: 0 / 0
13.11.2018, 17:49
    #39732607
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Antonariy,

Да при чем тут МСДН? Если ты уверен, что нет конкуренции, то и не о чем думать.
...
Рейтинг: 0 / 0
13.11.2018, 18:00
    #39732621
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lock
Antonariy,
Технически нет проблем. Опасность в архитектуре когда объединяют поля в класс, а поля совершено не зависят друг от друга.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Lock / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]