summaryrefslogtreecommitdiff
path: root/sources/scala/concurrent/Channel.scala
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scala/concurrent/Channel.scala')
-rw-r--r--sources/scala/concurrent/Channel.scala11
1 files changed, 8 insertions, 3 deletions
diff --git a/sources/scala/concurrent/Channel.scala b/sources/scala/concurrent/Channel.scala
index b89e20f065..8c4faa1b61 100644
--- a/sources/scala/concurrent/Channel.scala
+++ b/sources/scala/concurrent/Channel.scala
@@ -1,14 +1,18 @@
package scala.concurrent;
class Channel[a] with Monitor {
+ class LinkedList[a] {
+ var elem: a = _;
+ var next: LinkedList[a] = null;
+ }
private var written = new LinkedList[a];
- private var lastWritten = written;
+ private var lastWritten = new LinkedList[a];
private var nreaders = 0;
def write(x: a) = synchronized {
+ lastWritten.elem = x;
lastWritten.next = new LinkedList[a];
lastWritten = lastWritten.next;
- lastWritten.elem = x;
if (nreaders > 0) notify();
}
@@ -16,7 +20,8 @@ class Channel[a] with Monitor {
if (written.next == null) {
nreaders = nreaders + 1; wait(); nreaders = nreaders - 1;
}
+ val x = written.elem;
written = written.next;
- written.elem;
+ x
}
}