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 + -
显示快捷键?