From a45c078ec7bcead01ebd13835fedec6e271deadd Mon Sep 17 00:00:00 2001 From: michelou Date: Mon, 23 Feb 2004 13:08:32 +0000 Subject: - example 'buffer1' renamed to 'oneplacebuffer' --- sources/examples/oneplacebuffer.scala | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 sources/examples/oneplacebuffer.scala (limited to 'sources/examples/oneplacebuffer.scala') diff --git a/sources/examples/oneplacebuffer.scala b/sources/examples/oneplacebuffer.scala new file mode 100644 index 0000000000..9a7d1d714d --- /dev/null +++ b/sources/examples/oneplacebuffer.scala @@ -0,0 +1,46 @@ +package examples; + +object oneplacebuffer { + + import scala.concurrent._; + + class OnePlaceBuffer { + private val m = new MailBox(); // An internal mailbox + private case class Empty(), Full(x: Int); // Types of messages we deal with + + m send Empty(); // Initialization + + def write(x: Int): Unit = m receive { + case Empty() => + Console.println("put " + x); + m send Full(x) + } + + def read: Int = m receive { + case Full(x) => + Console.println("get " + x); + m send Empty() ; x + } + } + + def main(args: Array[String]) = { + val buf = new OnePlaceBuffer; + val random = new java.util.Random(); + + def producer(n: int): unit = { + Thread.sleep(random.nextInt(1000)); + buf.write(n); + producer(n + 1) + } + + def consumer: unit = { + Thread.sleep(random.nextInt(1000)); + val n = buf.read; + consumer + } + + ops.spawn(producer(0)); + ops.spawn(consumer) + } + +} -- cgit v1.2.3