|
Scala example source code file (TerminationMonitor.scala)
The TerminationMonitor.scala Scala example source code/* __ *\ ** ________ ___ / / ___ Scala API ** ** / __/ __// _ | / / / _ | (c) 2005-2013, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** \* */ package scala.actors package scheduler import scala.collection.mutable private[scheduler] trait TerminationMonitor { _: IScheduler => protected var activeActors = 0 protected val terminationHandlers = new mutable.HashMap[TrackedReactor, () => Unit] private var started = false /** newActor is invoked whenever a new actor is started. */ def newActor(a: TrackedReactor) = synchronized { activeActors += 1 if (!started) started = true } /** Registers a closure to be executed when the specified * actor terminates. * * @param a the actor * @param f the closure to be registered */ def onTerminate(a: TrackedReactor)(f: => Unit): Unit = synchronized { terminationHandlers += (a -> (() => f)) } /** Registers that the specified actor has terminated. * * @param a the actor that has terminated */ def terminated(a: TrackedReactor) = { // obtain termination handler (if any) val todo = synchronized { terminationHandlers.get(a) match { case Some(handler) => terminationHandlers -= a handler case None => () => { /* do nothing */ } } } // invoke termination handler (if any) todo() synchronized { activeActors -= 1 } } /** Checks whether all actors have terminated. */ private[actors] def allActorsTerminated: Boolean = synchronized { started && activeActors <= 0 } /** Checks for actors that have become garbage. */ protected def gc() {} } Other Scala source code examplesHere is a short list of links related to this Scala TerminationMonitor.scala source code file: |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.