В Hazelcast возможно ли использовать кластерные блокировки, которые не заботятся о локальном потоке, который выполняет операции блокировки / разблокировки?

Блокировки Hazelcast (такие как http://www.hazelcast.com/docs/1.9.4/manual/multi_html/ch02s07.html), как я понимаю, ведут себя так же, как примитивы параллелизма Java, но во всем кластере. Это позволяет использовать для синхронизации между потоками в локальном процессе, а также в кластере.

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

1 ответ

Решение

Семафор - ваш друг, потому что у него нет понятия собственности. Он использует разрешения, которые могут быть получены; поток x может получить разрешение 1, а поток y может разблокировать разрешение 1. Если вы инициализируете семафор с одним разрешением, вы получите взаимное исключение.

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.init(1);
s.acquire(); 

А в другой ветке вы можете освободить это разрешение:

ISemaphore s = hazelcastInstance.getSemaphore("foo");
s.release(); 
Другие вопросы по тегам