在Hazelcast中寻找Distributed Reentrant ReadWrite Lock解决方案。有谁知道它的实施还是在起作用?
发现旧的线程引用了这个,但没有解决方案: https://groups.google.com/forum/#!searchin/hazelcast/readwrite/hazelcast/YBQtgHPMdP0/xwoTYdu_Z58J
答案 0 :(得分:2)
Hazelcast没有实现ReadWrite锁,这是有充分理由的。我确实按照建议尝试实现我自己的readwrite锁,但它太复杂了。
结果是一个readwrite lock,需要太多的网络调用(性能下降)。并且仍然不能满足节点故障(如果使用多节点)
问题源于您需要使用信号量进行读锁定(因为传统锁只能通过锁定它们的线程解锁)。这个问题是,当一个节点发生故障时,它的所有锁都将被释放,但信号量不会被释放,因此会产生死锁。
我们有几个人正在研究这个问题。提到的问题只是冰山一角。 如果有人确实找到了解决方案,请分享,但我不认为这是一个可行的解决问题,因为可能的解决方案性能松散而且复杂程度很高。
答案 1 :(得分:0)
没有实施;但是如果你真的需要它,你可以在通过spi暴露的淡褐色低层基础设施之上构建它。
答案 2 :(得分:-1)
这似乎是解决问题的一个不错的解决方案:https://github.com/ThoughtWire/hazelcast-locks
它使用Hazelcast以分布式方式实现java.util.concurrent.locks.ReadWriteLock接口。描述起来有点复杂,但查看源代码是可以理解的。值得回顾。