|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Если есть переменная Код: plaintext
Код: plaintext
Код: plaintext
Вопрос - как сделать блокировку, чтобы можно было взять на чтение набор данных? Дополнительные разрешенные состояния: * только один пишет в запись, никто не может брать на чтение набор, но может брать на чтение или на запись другие записи * многие берут на чтение набор, запрещая брать на запись отдельные записи, но разрешая брать на чтение отдельные записи ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 11:54 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Ээм. Евгений Каратаев дал кому-то попользоваться своей учеткой? Мне даже неудобно писать, но блокировка не запрещает ни чтение, ни запись, только другую блокировку. По вопросу, мне кажется, shared look делает то, что вам нужно. И не вижу смысла в lock ^Data(id,$job) Или какой-то подвох, а я ничего не понял, а на самом деле все сложнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:08 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Я понял задачку именно как предложение реализовать на MUMPSе разделяемую блокировку, или аналогичный механизм, который позволит: 1- нескольким процессам обозначить своё невзаимоисключающее присутствие, если никто не владеет исключительной блокировкой 2- овладеть исключительной блокировкой, если нет никого в состоянии (1). Чтение/запись - лишь примеры применения. Ясно, что блокировка - это лишь соглашение, и она не препятствует ни тому, ни другому. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 10:08 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
А, речь по MUMPS? Значит, на самом деле был подвох Тогда как там работает блокировка? Как эксклюзивная в Каше? И нужно эмулировать разделяемую блокировку? Тогда чем не подходит вариант, предложенный Евгением? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 13:39 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Да, в Стандартном M[UMPS] блокировка только исключительная. С помощью такой блокировки не реализовать вот это: ну я* многие берут на чтение набор, запрещая брать на запись отдельные записи, но разрешая брать на чтение отдельные записитак как она не позволяет отметить неисключительное владение ресурсом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 14:42 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Необязательно с помощью одной. Можно комбинировать две, три, сколько надо. Можно блокировать списком. Необязательно что имена должны соответствовать именам ресурсов, имена блокировок могут быть синтетическими. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2018, 16:08 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Меня тоже несколько обескуражил интерес коллеги Ну_я к вопросу "блокировок на чтение", поскольку это вроде как не его специализация. Кроме того, даже прикладники, как правило, плюют на проблему целостности при "длинном" чтении, хотя прекрасно о ней знают. Поэтому хотелось бы начать с простого. Команда MERGE. Нужно ли заботиться о блокировке (неизменности) аргумента-источника? Нужно ли заключать эту команду в "транзакционные скобки"? Транзакционную целостность проверить можно (хотя это муторно и не вполне надёжно). Но проверить неизменность, "защищённость" аргумента во время исполнения MERGE очень затруднительно. Кто-нибудь что-то может сказать? PS. И это вопрос как раз по "специализации" коллеги Ну_я. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 09:51 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Именно так! Подпишусь под каждым словом. Но! Это индивидуальная, "штучная" работа в каждом конкретном случае. Универсальных, элегантных и надёжных механизмов я не встречал. Но сталкивался с ними дважды. Первый способ (радикальный) был предложен и реализован четверть века назад небезызвестным "классиком": монопольный режим (суть понятна из названия). Дёшево и сердито. Второй механизм был предложен одним из твоих прошлых боссов: работа с копией БД, или её фрагмента. Понятное дело, что такое мероприятие – это "то же самое, только в профиль". Ибо копирование включает в себя упомянутое "длинное" чтение и сути проблемы не меняет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 10:18 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
И_я_тоже, Ой, в движке скуль-форума ошибочка нарисовалась это же не первое ваше сообщение, а 2498-е ! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 10:26 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
И_я_тожеКоманда MERGE. Нужно ли заботиться о блокировке (неизменности) аргумента-источника? Нужно ли заключать эту команду в "транзакционные скобки"? Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует. Если менять поведение, то надо вводить другую команду, скажем zmerge, или добавлять опцию, или еще что, но если в коде написано merge, то должен выполняться merge согласно определению. IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 12:32 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
experience...форума ошибочка нарисовалась это же не первое ваше сообщение, а 2498-е ! Не знаю, что там нарисовалось, но пока я пытаюсь всего лишь научиться отвечать на конкретные реплики... И пока побеждает "движок". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 15:06 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
ну я...Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует... Так я и спрашиваю: как должно быть по стандарту? Является ли команда MERGE "атомарной"? Не случится ли "вклинивания" другого процесса в аргумент-источник, пока он мержится? К сожалению, не смог найти стандарта. Не подскажете, где его отрыть? ну я...IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения. Если правильно понял, когда исполняется merge, я должен сам заботиться о целостности результата? Другими словами, merge не является "атомарным"? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 19:56 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
И_я_тожену я...Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует... Так я и спрашиваю: как должно быть по стандарту? Является ли команда MERGE "атомарной"? Не случится ли "вклинивания" другого процесса в аргумент-источник, пока он мержится? К сожалению, не смог найти стандарта. Не подскажете, где его отрыть? ну я...IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения. Если правильно понял, когда исполняется merge, я должен сам заботиться о целостности результата? Другими словами, merge не является "атомарным"? Дык гугль подскажет http://71.174.62.16/Demo/AnnoStd ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 20:48 |
|
Спортивная новогодняя задачка на блокировки
|
|||
---|---|---|---|
#18+
Блок А.Н.Ээм. Евгений Каратаев дал кому-то попользоваться своей учеткой? Мне даже неудобно писать, но блокировка не запрещает ни чтение, ни запись, только другую блокировку. По вопросу, мне кажется, shared look делает то, что вам нужно. И не вижу смысла в lock ^Data(id,$job) Или какой-то подвох, а я ничего не понял, а на самом деле все сложнее? Победителем назначаю пользователя Блок А.Н. Его ответ наиболее близок к работающему варианту, хотя ожидалось решение на стандартных блокировках. Действительно, шареная блокировка Код: plaintext 1.
Код: plaintext 1.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2018, 11:55 |
|
|
start [/forum/topic.php?fid=39&fpage=4&tid=1556218]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 289ms |
total: | 415ms |
0 / 0 |