|
Организация подобия мутекса
| ☑ |
0
Liova
17.10.11
✎
15:49
|
Всем привет! Нужно организовать подобие мутекса в 8.1
Задача такая: Есть регистр сведений, в нем есть записи, они разными сеансами в разное время могут "отправляться" - обрабатываются, потом стираются. Надо сделать так, чтобы во время обработки одним сеансом, другой не стал бы одновременно отправлять.
Я поставил реквизит ВОбработке и делаю в транзакции
1) Запрос с "ДЛЯ ИЗМЕНЕНИЯ" по регистру, где НЕ ВОбработке
2) Ставлю записям ВОбработке
3) Обрабатвают эти записи
4) Стираю их
В таком случае у меня исчезает вероятность того, что несколько сеансов одновременно начнут обрабатывать одну запись?
|
|
1
Liova
17.10.11
✎
15:56
|
ап
|
|
2
Serginio1
17.10.11
✎
16:03
|
Проще использовать управляемые блокировки.
|
|
3
Liova
17.10.11
✎
16:08
|
(2) Возможно. Описанный мной способ проверен сейчас и работает - "вклинившийся" сеанс ждет по блокировке.
|
|
4
Serginio1
17.10.11
✎
16:16
|
ДЛЯ ИЗМЕНЕНИЯ это вариант монопольной управляемой блокировкой (РежимБлокировкиДанных.Исключительный). С помощью управляемых блокировок ты можешь делать много читателей и один писатель ,так как РежимБлокировкиДанных.Разделяемый не блокируют друг друга, а РежимБлокировкиДанных.Исключительный блокиует все.
|
|
5
Liova
17.10.11
✎
16:21
|
В том-то и дело, что мне надо, чтобы другие не успели _прочитать_ эти записи как неотправленные.
|
|
6
Sk0rp
17.10.11
✎
16:23
|
(0) Что будешь делать, когда программа аварийно завершится во время обработки?
|
|
7
acsent
17.10.11
✎
16:26
|
id сеанса
|
|
8
Sk0rp
17.10.11
✎
16:28
|
(7) А чем это поможет? Если с твоим id не совпадает, то значит занял кто-то другой. А этот другой может в BSOD еще вчера упал и записи навечно "ВОбработке".
Для 7.7 я вот так решал:
|
|
9
Serginio1
17.10.11
✎
16:34
|
(6) Я просто показал общий вариант, а не подмножество , которые ты сможешь применить в других схемах.
|
|
10
acsent
17.10.11
✎
16:56
|
(8) Сеансы будут непересекаться. Делать в транзакции.
|
|