added lock util class
This commit is contained in:
parent
b2b4b7d799
commit
e2ee9835a1
1 changed files with 51 additions and 0 deletions
51
akka-core/src/main/scala/util/LockUtil.scala
Normal file
51
akka-core/src/main/scala/util/LockUtil.scala
Normal 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é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é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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue