diff options
Diffstat (limited to 'sources/scala/concurrent/Channel.scala')
-rw-r--r-- | sources/scala/concurrent/Channel.scala | 11 |
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 } } |