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の役割は果たしません.
使用例:
 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.