summaryrefslogtreecommitdiff
path: root/src/library/scala/concurrent/SyncVar.scala
diff options
context:
space:
mode:
authorstepancheg <stepancheg@epfl.ch>2008-06-10 19:52:33 +0000
committerstepancheg <stepancheg@epfl.ch>2008-06-10 19:52:33 +0000
commit740c36ace1b1efd328bc887a935b4e1ce2a6f1ef (patch)
tree52d0a06160dca8ab06f4a87997163f93f0f216e3 /src/library/scala/concurrent/SyncVar.scala
parent86d6fb22d0460739428fdc25085761180aa10fc2 (diff)
downloadscala-740c36ace1b1efd328bc887a935b4e1ce2a6f1ef.tar.gz
scala-740c36ace1b1efd328bc887a935b4e1ce2a6f1ef.tar.bz2
scala-740c36ace1b1efd328bc887a935b4e1ce2a6f1ef.zip
SyncVar enhancements:
* deprecation of "exception" field * addition of blocking-queue-like "take", "put" methods * change of "unset" signature
Diffstat (limited to 'src/library/scala/concurrent/SyncVar.scala')
-rw-r--r--src/library/scala/concurrent/SyncVar.scala19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/library/scala/concurrent/SyncVar.scala b/src/library/scala/concurrent/SyncVar.scala
index 6b9ca33395..c04268990a 100644
--- a/src/library/scala/concurrent/SyncVar.scala
+++ b/src/library/scala/concurrent/SyncVar.scala
@@ -28,6 +28,14 @@ class SyncVar[A] {
else throw exception.get
}
+ def take() = synchronized {
+ try {
+ get
+ } finally {
+ unset()
+ }
+ }
+
def set(x: A) = synchronized {
value = x
isDefined = true
@@ -41,6 +49,9 @@ class SyncVar[A] {
notifyAll()
}
+ /**
+ * @deprecated Will be removed in 2.8. SyncVar should not allow exception by design.
+ */
def setWithCatch(x: => A) = synchronized {
try {
this set x
@@ -51,12 +62,18 @@ class SyncVar[A] {
}
}
+ def put(x: A) = synchronized {
+ while (isDefined) wait()
+ set(x)
+ }
+
def isSet: Boolean = synchronized {
isDefined
}
- def unset = synchronized {
+ def unset(): Unit = synchronized {
isDefined = false
+ notifyAll()
}
}