2017-01-04 8 views
1

Похоже, что я могу получить распределенный замок через API IgniteCache # public Lock lock(K key);.Может использовать IgniteCache.lock как распределенный замок

Одна вещь, которую я хочу подтвердить, заключается в том, что когда один процесс получает блокировку от этого объекта, но не освобождает эту блокировку до того, как процесс замирает, Ignit должен быть уверен, что блокировка, удерживаемая мертвым процессом, будет освобождена , Так что другие процессы, которые ждут блокировки, получат возможность получить блокировку?

ответ

2

Ignite # ReentrantLock метод имеет логический флаг failoverSafe что означает именно то, что вы хотите. Если узел покинет топологию, которая уже приобрела блокировки, тогда блокировки будут отключены.

+0

Ключ Ignite Cache # (ключ) имеет одинаковую семантику перехода на другой ресурс. Но помните, что он работает только для транзакционного кеша. –

+0

Спасибо @ Николай, я понял. Звук, что 'Ignite # reentrantLock' НЕ создается против кеша, так что проблема с транзакционным кэшем с этим API. – Tom

+0

@ То, что вы правы. 'Ignite # reentrantLock' создает отдельный примитив синхронизации. 'Ignite Cache.lock (key)' аналогично по пессимистичной транзакции с одним ключом. –