powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как использовать Lock правильно
25 сообщений из 26, страница 1 из 2
как использовать Lock правильно
    #36306170
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
появилась необходимость поставить блокировку на глобаль: простой пример, характеризующий
необходимую функциональность, 2 программы:
1 программа
Код: plaintext
1.
2.
3.
4.
5.
6.
Lock ^TEST
s ^TEST( 1 )= 5 
j ^someprog
h  10 
Lock
q

2 программа (^someprog)
Код: plaintext
1.
2.
s ^TEST( 1 )= 10 
q
проблема в том, что значение 10 должно записаться, когда блокировку снимет первая программа, специально выставлена пауза в 10 секунд чтоб наблюдать изменения значений в глобали, но цифра 10 записывается еще до снятия блокировки. Подскажите как правильно реализовать нужную функциональность.
Спасибо
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36306246
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwer , запись данных никак не зависит от состояния блокировки...

Твою задачку можно реализовать например так.

Код: plaintext
1.
2.
3.
4.
5.
L +^TEST
s ^TEST( 1 )= 5 
j ^someprog
h  10 
L -^TEST
q

Код: plaintext
1.
2.
3.
4.
5.
do {
   l +^TEST: 0 
} while '$t
s ^TEST( 1 )= 10 
l -^TEST
q
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36306326
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
первую часть понял, ставим блокировку с +, а вторую можно немного объяснить? чет не понимаю принцип
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36306381
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во второй части,
в цикле устанавливается блокировка с ожиданием 0, т.е. если блокировка сразу не удалась, то выходим, если блокировка не установилась, то $test будет 0, соответственно цикл не завершится пока не установится блокировка

_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36306433
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь, буду внедрять :)
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36306755
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ставить блокировку без таймаута опасненько - IMXO.

А так - после выполнения lock - нужно обязательно анализировать $test
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36308211
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы посоветовал обратить внимание на механизм передачи сообщений через почтовый ящик, или использование семафоров. Есть и еще ряд методов синхронизации.
Механизм блокировки самый простой, но не всегда самый удобный.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36308229
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB , примеры бы показал... А то заинтриговал и все.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36311797
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, хотя бы пару примерчиков по организации блокировок различными средствами..
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36311893
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwer , собственно про блокировку мы тебе написали... А тут, как я понял, другие способы реализации контроля "занятости" нужного тебе "элемента"...
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36311986
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa , вот хотелось бы тоже узнать про контроль занятости чего нить нового. Способ описаный выше вроде как хорошо работает, не жалуюсь :)
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36312434
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewQwer,

Я упомянул не о контроле занятости ресурса, в данном случае с использованием команды Lock, а о способе синхронизации процессов через почтовый ящик.
The %SYSTEM.Event class provides an interface to the Cache Event API.
%SYSTEM.Event class достаточно хорошо описан в документации по классам Cache, вот если бы все классы так описывались.
Пример Вам может ничем и не поможет, если Вы не знакомы с подобным способом общения между процессами, к тому же, все очень тесно будет привязано к решаемым Вами задачам.
Если Вам действительно нужен пример, то я Вам его предоставлю, возьму со своих проектов, уберу все лишнее что может Вас запутать и выложу. Просто сейчас очень занят, если потерпите какое-то время, то я выложу.
Если же Вам знаком подобный механизм, то из описания класса Вы все поймете.

Просто я указал что такой механизм в Cache существует, не все могли об этом знать.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36312442
AndrewQwer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexKB , когда у вас будет достаточно времени было бы неплохо глянуть примерчик, для самообразования любая информация полезна. Спасибо.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36720808
CEH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB меня тоже интересует такой метод контроля ресурсами. Можно ли увидеть пример?
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765261
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Код: plaintext
1.
2.
do {
   l +^TEST: 0 
} while '$t

Я правильно понимаю, что предлагается долбиться Lock'ом в цикле, пока не пройдет?
С ожиданием 0. Вы это серьезно?
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765710
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei Obrastsov , а это уже как ты сам пожелаешь...

P.S. Поговаривают один программер помер в душе от истощения, прочитав инструкцию на шампуне:
1. Нанести
2. Намылить
3. Смыть
4. Повторить
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765774
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei Obrastsovkrvsa
Код: plaintext
1.
2.
do {
   l +^TEST: 0 
} while '$t

Я правильно понимаю, что предлагается долбиться Lock'ом в цикле, пока не пройдет?
С ожиданием 0. Вы это серьезно?]

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

можно конечно не использовать ожидания, тогда программа зависнет ожидая освобождения блокировки, а вот это уже может быть не желательным
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765783
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько понимаю, возражение вызвало время ожидания = 0. Стоит ли грузить [одно из ядер] CPU на 100%?
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765801
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в чем проблема, добавив в этом цикле задержку hang 0.1, ну или там своим потребностям, можно уже не так волноваться о процессоре
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36765910
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovСтоит ли грузить [одно из ядер] CPU на 100%?
Уж чего точно не стоит делать, так это сурово обсуждать пример-иллюстрацию работы блокировки.

Поскольку там неболее чем через 10 секунд первый процесс снимет блокировку и "позволит" второму выполнить несложные действия с глобалом.

Если кому-то сей тестовый пример кажется дюже энерго затратным - дайте свой вариант, на нём и остановимся.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36767491
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorсмысл в использовании ожидания, что вы можете по желанию прервать работу и попробовать позже, когда это будет возможно

можно конечно не использовать ожидания, тогда программа зависнет ожидая освобождения блокировки, а вот это уже может быть не желательным
Я вообще-то догадался для чего используется ожидание.
Советую прикинуть, сколько раз выполнится за 10 секунд этот блок.
И подумать.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36767492
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaУж чего точно не стоит делать, так это сурово обсуждать пример-иллюстрацию работы блокировки.

Поскольку там неболее чем через 10 секунд первый процесс снимет блокировку и "позволит" второму выполнить несложные действия с глобалом.

Это всего лишь иллюстрация подхода к программированию. Очень даже симптоматично и
в духе времени.
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36767615
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei Obrastsov , твой пример так и не увидим?
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36767694
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa Sergei Obrastsov , твой пример так и не увидим?
Простите, он разве не очевиден?

Код: plaintext
1.
2.
lock +^TEST: 10  else  quit
...
...
Рейтинг: 0 / 0
как использовать Lock правильно
    #36768040
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну теперь-то все встало на свои места!
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как использовать Lock правильно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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