Skip to content
Snippets Groups Projects
Monitor.scala 619 B
Newer Older
package concpar21final03.instrumentation

class Dummy

trait Monitor:
  implicit val dummy: Dummy = new Dummy

  def wait()(implicit i: Dummy) = waitDefault()

  def synchronized[T](e: => T)(implicit i: Dummy) = synchronizedDefault(e)

  def notify()(implicit i: Dummy) = notifyDefault()

  def notifyAll()(implicit i: Dummy) = notifyAllDefault()

  private val lock = new AnyRef

  // Can be overridden.
  def waitDefault(): Unit = lock.wait()
  def synchronizedDefault[T](toExecute: => T): T = lock.synchronized(toExecute)
  def notifyDefault(): Unit = lock.notify()
  def notifyAllDefault(): Unit = lock.notifyAll()