Получи Lock и ID атомарно - PullRequest
0 голосов
/ 29 июня 2018

Я использую MySQL для механизма распределенной блокировки. Это работает довольно хорошо, однако у меня есть одно очень маленькое состояние гонки, которое я никогда не выполнял, но мне любопытно, есть ли у меня другие варианты, чтобы избежать этого.

В настоящее время в моем коде я вызываю GET_LOCK, а затем сразу после этого я вызываю IS_USED_LOCK, чтобы получить идентификатор соединения, удерживающего блокировку. Это необходимо, чтобы я мог наблюдать за тем, как он меняется, и сигнализировать о других событиях. Однако, похоже, что я могу вызвать GET_LOCK, получить блокировку, а затем потерять ее в миллисекундах перед вызовом IS_USED_LOCK.

Есть ли у меня возможность атомарно вызвать GET_LOCK и получить идентификатор блокировки?

UPDATE:

Я не знал, SELECT GET_LOCK('test/lock', 10), IS_USED_LOCK('test/lock'); возможно, но не уверен, что внутри это на самом деле атомарно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...