powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Спортивная новогодняя задачка на блокировки
14 сообщений из 14, страница 1 из 1
Спортивная новогодняя задачка на блокировки
    #39753830
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть переменная
Код: plaintext
^Data(id)
то ее можно заблокировать на запись
Код: plaintext
lock ^Data(id)
и на чтение
Код: plaintext
lock ^Data(id,$job)
Либо один пишущий, либо много читающих.

Вопрос - как сделать блокировку, чтобы можно было взять на чтение набор данных?
Дополнительные разрешенные состояния:
* только один пишет в запись, никто не может брать на чтение набор, но может брать на чтение или на запись другие записи
* многие берут на чтение набор, запрещая брать на запись отдельные записи, но разрешая брать на чтение отдельные записи
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754143
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ээм. Евгений Каратаев дал кому-то попользоваться своей учеткой?
Мне даже неудобно писать, но блокировка не запрещает ни чтение, ни запись, только другую блокировку.
По вопросу, мне кажется, shared look делает то, что вам нужно. И не вижу смысла в lock ^Data(id,$job)

Или какой-то подвох, а я ничего не понял, а на самом деле все сложнее?
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754356
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял задачку именно как предложение реализовать на MUMPSе разделяемую блокировку, или аналогичный механизм, который позволит:
1- нескольким процессам обозначить своё невзаимоисключающее присутствие, если никто не владеет исключительной блокировкой
2- овладеть исключительной блокировкой, если нет никого в состоянии (1).

Чтение/запись - лишь примеры применения. Ясно, что блокировка - это лишь соглашение, и она не препятствует ни тому, ни другому.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754525
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, речь по MUMPS? Значит, на самом деле был подвох
Тогда как там работает блокировка? Как эксклюзивная в Каше? И нужно эмулировать разделяемую блокировку?
Тогда чем не подходит вариант, предложенный Евгением?
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754569
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в Стандартном M[UMPS] блокировка только исключительная. С помощью такой блокировки не реализовать вот это:
ну я* многие берут на чтение набор, запрещая брать на запись отдельные записи, но разрешая брать на чтение отдельные записитак как она не позволяет отметить неисключительное владение ресурсом.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754624
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необязательно с помощью одной. Можно комбинировать две, три, сколько надо. Можно блокировать списком. Необязательно что имена должны соответствовать именам ресурсов, имена блокировок могут быть синтетическими.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754807
И_я_тоже
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня тоже несколько обескуражил интерес коллеги Ну_я к вопросу "блокировок на чтение", поскольку это вроде как не его специализация. Кроме того, даже прикладники, как правило, плюют на проблему целостности при "длинном" чтении, хотя прекрасно о ней знают. Поэтому хотелось бы начать с простого.
Команда MERGE. Нужно ли заботиться о блокировке (неизменности) аргумента-источника? Нужно ли заключать эту команду в "транзакционные скобки"?
Транзакционную целостность проверить можно (хотя это муторно и не вполне надёжно). Но проверить неизменность, "защищённость" аргумента во время исполнения MERGE очень затруднительно.
Кто-нибудь что-то может сказать?
PS. И это вопрос как раз по "специализации" коллеги Ну_я.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754818
И_я_тоже
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Именно так! Подпишусь под каждым словом. Но! Это индивидуальная, "штучная" работа в каждом конкретном случае. Универсальных, элегантных и надёжных механизмов я не встречал.
Но сталкивался с ними дважды. Первый способ (радикальный) был предложен и реализован четверть века назад небезызвестным "классиком": монопольный режим (суть понятна из названия). Дёшево и сердито.
Второй механизм был предложен одним из твоих прошлых боссов: работа с копией БД, или её фрагмента. Понятное дело, что такое мероприятие – это "то же самое, только в профиль". Ибо копирование включает в себя упомянутое "длинное" чтение и сути проблемы не меняет.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754819
experience
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И_я_тоже,
Ой, в движке скуль-форума ошибочка нарисовалась это же не первое ваше сообщение, а 2498-е !
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754863
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И_я_тожеКоманда MERGE. Нужно ли заботиться о блокировке (неизменности) аргумента-источника? Нужно ли заключать эту команду в "транзакционные скобки"?
Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует.
Если менять поведение, то надо вводить другую команду, скажем zmerge, или добавлять опцию, или еще что, но если в коде написано merge, то должен выполняться merge согласно определению.
IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения.
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39754969
И_я_тоже
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
experience...форума ошибочка нарисовалась это же не первое ваше сообщение, а 2498-е !
Не знаю, что там нарисовалось, но пока я пытаюсь всего лишь научиться отвечать на конкретные реплики... И пока побеждает "движок".
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39755030
И_я_тоже
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я...Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует...
Так я и спрашиваю: как должно быть по стандарту? Является ли команда MERGE "атомарной"? Не случится ли "вклинивания" другого процесса в аргумент-источник, пока он мержится? К сожалению, не смог найти стандарта. Не подскажете, где его отрыть?
ну я...IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения.
Если правильно понял, когда исполняется merge, я должен сам заботиться о целостности результата? Другими словами, merge не является "атомарным"?
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39755049
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И_я_тожену я...Команда merge определена по своему поведению в стандарте и поэтому ее менять не следует...
Так я и спрашиваю: как должно быть по стандарту? Является ли команда MERGE "атомарной"? Не случится ли "вклинивания" другого процесса в аргумент-источник, пока он мержится? К сожалению, не смог найти стандарта. Не подскажете, где его отрыть?
ну я...IMHO если прикладникам надо консистентный merge, то его надо обкладывать блокировками / транзакциями на основе легко понимаемых команд без накрученного скрытого поведения.
Если правильно понял, когда исполняется merge, я должен сам заботиться о целостности результата? Другими словами, merge не является "атомарным"?
Дык гугль подскажет
http://71.174.62.16/Demo/AnnoStd
...
Рейтинг: 0 / 0
Спортивная новогодняя задачка на блокировки
    #39755123
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Ээм. Евгений Каратаев дал кому-то попользоваться своей учеткой?
Мне даже неудобно писать, но блокировка не запрещает ни чтение, ни запись, только другую блокировку.
По вопросу, мне кажется, shared look делает то, что вам нужно. И не вижу смысла в lock ^Data(id,$job)

Или какой-то подвох, а я ничего не понял, а на самом деле все сложнее?
Победителем назначаю пользователя Блок А.Н.
Его ответ наиболее близок к работающему варианту, хотя ожидалось решение на стандартных блокировках.
Действительно, шареная блокировка
Код: plaintext
1.
lock ^Data#"S"
не дает блокировать на запись ноды
Код: plaintext
1.
^Data(id)
но дает их блокировать на чтение
Код: plaintext
1.
lock ^Data(id)#"S"
С наступающим!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Спортивная новогодняя задачка на блокировки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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