Текущее время: Сб, авг 02 2025, 17:20

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Блокировка: аналог семафора (со счетчиком)
СообщениеДобавлено: Пн, май 28 2007, 10:57 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Добрый день, уважаемые коллеги.

Как можно реализовать такую блокировку, когда одновеменно "захватывать" объект может больше, чем одна программа, а заданное количество.

Т.е., например, вызвать ENQUE_* одновременно могут 5 программ, а 6-я получит ошибку и должна будет ждать пока одна из первых пяти освободит объект (DEQUE).

Т.е. аналог объекта "семафор" при программировании под винду, скажем.

Как это сделать в абапе?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 11:00 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Написать свой класс и табличку для блок. объектов.
Штатными средствами - никак. Только свой код.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 11:29 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Можно сделать табличку с 6 записями и в цикле идти по ним. Удалось заблокировать - работаем, не удалось - ждем.
Я так понимаю это для ограничения на запуск тяжелых отчетов?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 13:10 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Boger написал(а):
Можно сделать табличку с 6 записями и в цикле идти по ним. Удалось заблокировать - работаем, не удалось - ждем.
Я так понимаю это для ограничения на запуск тяжелых отчетов?


Да, именно для этого :))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 14:02 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Может сделать отдельно выборку в фоне, которая сохраняет предобработвнные данные в собственную табличку? имхо гораздо более правильный вариант.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 14:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Можно и стандартными. Взять любую готовую табличку с объектом блокировки, у которой ключ после манданта начинается с поля NUMC (а таких полно). И ставить блокировки по ключу A1, A2, A3, A4, A5, A6. Абап, и тем более, объекты блокировки не различают CHAR и NUMC.


Последний раз редактировалось sibrin Пн, май 28 2007, 14:33, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 14:32 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
sibrin написал:
Можно и стандартными. Взять любую готовую табличку с объектом блокировки, у которой ключ после манданта начинается с поля NUMC (а таких полно). И ставить блокировки по ключу A1, A2, A3, A4, A5, A6. Абапу, и тем более, объектам блокировки не различают CHAR и NUMC.

Спасибо, но я склоняюсь к решению, предложенному уважаемым Boger'ом.
Будем делать самопальный семафор. :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 28 2007, 15:13 
Гость
Есть такое понятие, как комулятивный счётчик. Он показывает, сколько раз блокировали объект.
С ним можно делать и наоборот - сколько раз блокировали, столько раз и надо разблокировать.

Цитата:
КумулятивнСчетчик записи блокировки / ПрогрОбновления
A cumulation counter specifies how often a lock operation (enqueue) has been executed on this lock enty. Mulitple locking, for example, in nested functions is possible (cumulation).

The lock is not canceled until the corresponding number of unlock operations (dequeue) have been executed and both cumulation counters are back to zero again.

Use
Background information:

A lock can have one or two owners. Accordingly, a transaction contains two lock owners. One of the lock owners is passed to the update task when the update is called. The other lock owner remains in the transaction. There is one cumulation counter for each lock owner.


в SM12 его хорошо видно.

Только вот как им воспользоваться - это вопрос.


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB