TerracottaでのReentrantReadWriteLockの使用について
ReentrantReadWriteLockは追加の構成tc-configを必要としない.xml.ただし、ReentrantReadWriteLockがcluster objectに含まれていないか、それ自体がcluster objectではない場合は、cluster objectの構造に置くか、rootと直接宣言する必要があります.通常ReentrantReadWriteLockを含むcluster objectにはCurrentHashMap,HashMapがある.なお、WeakHashMapのようなデータ構造TCはサポートする.CurrentStringMapはTC拡張などのデータ構造もあります
http://forge.terracotta.org/releases/projects/tim-concurrent-collections-root/
ReentrantReadWriteLockをこのようなcluster objectに入れなければ、ReentrantReadWriteLockが果たす役割はlocal lockにすぎない.cluster lockの役割は果たしません.
使用例:
原文:The only requirement is that any ReentrantReadWriteLock requiring clustered behavior must be a part of the clustered graph.A ReentrantReadWriteLock that is not a part of the clustered graph imparts local locking semantics only.
http://forge.terracotta.org/releases/projects/tim-concurrent-collections-root/
ReentrantReadWriteLockをこのようなcluster objectに入れなければ、ReentrantReadWriteLockが果たす役割はlocal lockにすぎない.cluster lockの役割は果たしません.
使用例:
private final ConcurrentStringMap<Object> locks = new ConcurrentStringMap<Object>();
private final Object LOCK = new Object();
public void writeOperation(Entity entity) {
if (locks.putIfAbsent(entity.getId(), LOCK) != null) {
//some other thread/node already has lock, exit
return;
}
try {
//critical section write operation here
} finally {
locks.removeNoReturn(entity.getId());
}
}
原文:The only requirement is that any ReentrantReadWriteLock requiring clustered behavior must be a part of the clustered graph.A ReentrantReadWriteLock that is not a part of the clustered graph imparts local locking semantics only.