added lock util class

This commit is contained in:
Jonas Bonér 2010-05-16 11:22:38 +02:00
parent b2b4b7d799
commit e2ee9835a1

View file

@ -0,0 +1,51 @@
/**
* Copyright (C) 2009-2010 Scalable Solutions AB <http://scalablesolutions.se>
*/
package se.scalablesolutions.akka.util
import java.util.concurrent.locks.{ReentrantReadWriteLock, ReentrantLock}
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
class ReentrantGuard {
private val lock = new ReentrantLock
def withGuard[T](body: => T): T = {
lock.lock
try {
body
} finally {
lock.unlock
}
}
}
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
class ReadWriteGuard {
private val rwl = new ReentrantReadWriteLock
private val readLock = rwl.readLock
private val writeLock = rwl.writeLock
def withWriteGuard[T](body: => T): T = {
writeLock.lock
try {
body
} finally {
writeLock.unlock
}
}
def withReadGuard[T](body: => T): T = {
readLock.lock
try {
body
} finally {
readLock.unlock
}
}
}