|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
Коллеги, приветствую! Помогите советом, как реализовать mutex? Пользователи параллельно запускают некий сценарий, состоящий из на набора хранимых процедур. Одна из этих процедур (а) должна выполняться строго монопольно. Т.е. другие аналогичные процедуры (а) других пользователей в этот же момент - недопустимы. Раньше я реализовывал мьютекс - очень просто. Создал таблицу mutex из одного поля i и из одной записи, и далее, в транзакции, внутри процедуры, делал: Код: sql 1.
И все было замечательно. Однако, теперь появился еще один вид хранимых процедур (b) b - неограниченно совместимы друг с другом, но не совместимы с (а). (а) - по прежнему не совместимы друг с другом. Хотелось бы, чтобы (b) множества пользователей выполнялись неограниченно параллельно, но запуск этих процедур был невозможен, пока выполняется хоть одна (a). Запуск (а) тоже НЕ мог бы производиться, пока продолжается выполнение хоть одной (b), или выполняется хоть одна (а). Ситуация, когда имеется запущенная (b), ожидающая ее окончание (а), и снова запускается (b) отодвигая (а) - допустима (и даже в некоторой степени - желательна). Как реализовать такой мьютекс, может у кого есть такие мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 11:28 |
|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
Ииии? Замечательно. Спасибо. А дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 13:58 |
|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
uaggster, Ииии? Замечательно. Спасибо. А дальше? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 14:44 |
|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
uaggster Хотелось бы, чтобы (b) множества пользователей выполнялись неограниченно параллельно, но запуск этих процедур был невозможен, пока выполняется хоть одна (a). Запуск (а) тоже НЕ мог бы производиться, пока продолжается выполнение хоть одной (b), или выполняется хоть одна (а). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
ЗЫ: Как по мне, то надежней делать с LockOwner = 'Transaction' и запретить выполнять процедуры вне транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 15:28 |
|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
invm, так, получается, достаточно лока на 1 ресурс (а)? И, еще, в случае если владелец - транзакция, то sp_releaseapplock - не нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 16:08 |
|
Как реализовать mutex?
|
|||
---|---|---|---|
#18+
uaggster invm, так, получается, достаточно лока на 1 ресурс (а)? uaggster И, еще, в случае если владелец - транзакция, то sp_releaseapplock - не нужен? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 16:25 |
|
|
start [/forum/topic.php?fid=46&fpage=50&tid=1685743]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 130ms |
0 / 0 |