updated some code examples
git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@26062 5e8d7ff9-d8ef-0310-90f0-a4852d11357a
This commit is contained in:
parent
e41184fd2e
commit
f1fbe5e026
|
@ -12,7 +12,7 @@ class ComputeServer(n: Int) {
|
|||
|
||||
private val openJobs = new Channel[Job]()
|
||||
|
||||
private def processor(i: Int): Unit = {
|
||||
private def processor(i: Int) {
|
||||
while (true) {
|
||||
val job = openJobs.read
|
||||
println("read a job")
|
||||
|
@ -32,16 +32,17 @@ class ComputeServer(n: Int) {
|
|||
() => reply.get
|
||||
}
|
||||
|
||||
spawn(replicate(0, n) { processor })
|
||||
//spawn(replicate(0, n) { processor })
|
||||
spawn((0 until n).par foreach { processor })
|
||||
}
|
||||
|
||||
object computeserver extends Application {
|
||||
object computeserver extends App {
|
||||
|
||||
def kill(delay: Int) = new java.util.Timer().schedule(
|
||||
new java.util.TimerTask {
|
||||
override def run() = {
|
||||
println("[killed]")
|
||||
System.exit(0)
|
||||
sys exit 0
|
||||
}
|
||||
},
|
||||
delay) // in milliseconds
|
||||
|
|
|
@ -2,35 +2,39 @@ package examples
|
|||
|
||||
object oneplacebuffer {
|
||||
|
||||
import scala.concurrent.{MailBox, ops}
|
||||
import scala.actors.Actor._
|
||||
import scala.concurrent.ops
|
||||
|
||||
class OnePlaceBuffer {
|
||||
private val m = new MailBox() {} // An internal mailbox
|
||||
private case class Empty() // Types of messages we deal with
|
||||
private case class Full(x: Int)
|
||||
private case class Put(x: Int)
|
||||
private case object Get
|
||||
|
||||
m send Empty() // Initialization
|
||||
|
||||
def write(x: Int) {
|
||||
m receive {
|
||||
case Empty() =>
|
||||
println("put " + x)
|
||||
m send Full(x)
|
||||
private val m = actor {
|
||||
var buf: Option[Int] = None
|
||||
loop {
|
||||
react {
|
||||
case Put(x) if buf.isEmpty =>
|
||||
println("put "+x);
|
||||
buf = Some(x); reply()
|
||||
case Get if !buf.isEmpty =>
|
||||
val x = buf.get
|
||||
println("get "+x)
|
||||
buf = None; reply(x)
|
||||
}
|
||||
}
|
||||
}
|
||||
m.start()
|
||||
|
||||
def read: Int = m receive {
|
||||
case Full(x) =>
|
||||
println("get " + x)
|
||||
m send Empty(); x
|
||||
}
|
||||
def write(x: Int) { m !? Put(x) }
|
||||
|
||||
def read(): Int = (m !? Get).asInstanceOf[Int]
|
||||
}
|
||||
|
||||
def kill(delay: Int) = new java.util.Timer().schedule(
|
||||
new java.util.TimerTask {
|
||||
override def run() = {
|
||||
override def run() {
|
||||
println("[killed]")
|
||||
exit(0)
|
||||
sys exit 0
|
||||
}
|
||||
},
|
||||
delay) // in milliseconds
|
||||
|
@ -40,19 +44,19 @@ object oneplacebuffer {
|
|||
val random = new java.util.Random()
|
||||
|
||||
def producer(n: Int) {
|
||||
Thread.sleep(random.nextInt(1000))
|
||||
buf.write(n)
|
||||
Thread.sleep(random nextInt 1000)
|
||||
buf write n
|
||||
producer(n + 1)
|
||||
}
|
||||
|
||||
def consumer {
|
||||
Thread.sleep(random.nextInt(1000))
|
||||
val n = buf.read
|
||||
Thread.sleep(random nextInt 1000)
|
||||
val n = buf.read()
|
||||
consumer
|
||||
}
|
||||
|
||||
ops.spawn(producer(0))
|
||||
ops.spawn(consumer)
|
||||
ops spawn producer(0)
|
||||
ops spawn consumer
|
||||
kill(10000)
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ extends Global(settings, reporter) {
|
|||
phasesSet += analyzer.typerFactory
|
||||
phasesSet += superAccessors // add super accessors
|
||||
phasesSet += pickler // serialize symbol tables
|
||||
phasesSet += refchecks // perform reference and override checking, translate nested objects
|
||||
phasesSet += refChecks // perform reference and override checking, translate nested objects
|
||||
|
||||
for (phase <- TemplatePlugin.components(this)) {
|
||||
phasesSet += phase
|
||||
|
|
Loading…
Reference in New Issue