diff --git a/akka-core/src/main/scala/util/LockUtil.scala b/akka-core/src/main/scala/util/LockUtil.scala new file mode 100644 index 0000000000..09a4b2d650 --- /dev/null +++ b/akka-core/src/main/scala/util/LockUtil.scala @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.util + +import java.util.concurrent.locks.{ReentrantReadWriteLock, ReentrantLock} + +/** + * @author Jonas Bonér + */ +class ReentrantGuard { + private val lock = new ReentrantLock + + def withGuard[T](body: => T): T = { + lock.lock + try { + body + } finally { + lock.unlock + } + } +} + +/** + * @author Jonas Bonér + */ +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 + } + } +} +