投機実行のやつでReadWriteLockを使ってみる

投機的実行をやってみたやつで、synchronizedを使ってたのだけど、ReadWriteLockを使ったほうが並列可能性が高くなるかもね、と思ってちょっと修正してみた。


ところで、最後のロックを次のように、ReadLockの中でWriteLock取得しようと思ったんだけど、デッドロックしてしまったようだ。
こういう再入はできないらしい。

Lock rlock = lock.readLock();
try{
    rlock.lock();
    if(modified.get()){
        if(version != readVer.get()){
            //変更されている
            continue;
        }
        Lock wlock = lock.writeLock();
        try{
            wlock.lock();
            value = myValue.get();
            version++;
        }finally{
            wlock.unlock();
        }
    }
}finally{
    rlock.unlock();
}


ということで、こんな感じ

続きを読む