channel.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 47 行
SCALA
47 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2003-2006, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id: Channel.scala 9235 2006-11-13 14:59:18Z mihaylov $package scala.concurrent/** This class ... * * @author Martin Odersky * @version 1.0, 10/03/2003 */class Channel[a] { class LinkedList[a] { var elem: a = _ var next: LinkedList[a] = null } private var written = new LinkedList[a] // FIFO buffer, realized through private var lastWritten = written // aliasing of a linked list private var nreaders = 0 /** * @param x ... */ def write(x: a) = synchronized { lastWritten.elem = x lastWritten.next = new LinkedList[a] lastWritten = lastWritten.next if (nreaders > 0) notify() } def read: a = synchronized { if (null == written.next) { nreaders = nreaders + 1; wait(); nreaders = nreaders - 1 } val x = written.elem written = written.next x }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?