summaryrefslogtreecommitdiff
path: root/docs/examples/oneplacebuffer.scala
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:44:33 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:44:33 +0000
commit53a3cc7b17f4cf97075b7e71720777fd84109696 (patch)
tree0cc784e0b47ea49cc151a136d19f20bfa8ee2197 /docs/examples/oneplacebuffer.scala
parentdf50e05006b43b007c2587549030d24b5c154398 (diff)
downloadscala-53a3cc7b17f4cf97075b7e71720777fd84109696.tar.gz
scala-53a3cc7b17f4cf97075b7e71720777fd84109696.tar.bz2
scala-53a3cc7b17f4cf97075b7e71720777fd84109696.zip
Created proper 'docs' folder for new layout.
Diffstat (limited to 'docs/examples/oneplacebuffer.scala')
-rw-r--r--docs/examples/oneplacebuffer.scala47
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/examples/oneplacebuffer.scala b/docs/examples/oneplacebuffer.scala
new file mode 100644
index 0000000000..7fa2ae8dba
--- /dev/null
+++ b/docs/examples/oneplacebuffer.scala
@@ -0,0 +1,47 @@
+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)
+ }
+
+}
+