なんじゃくにっき

プログラミングの話題中心。

Scala de Design Pattern: Guarded Suspension

 要求を送るオブジェクトと、要求を受けるオブジェクトがあり、
要求は一旦キューを介して受け渡される。
要求を受けるオブジェクトはキューに要求が送られるまで待ち続ける。
 
 Actorを使って実装してみる。
Actorはメッセージボックスというキューを持っている。
 
下の例の場合、
要求を送るオブジェクトはメインスレッド、
キューがanActorのメッセージボックス、
要求を受けるオブジェクトがanActor。
 

import scala.actors._
import Actor._
import java.lang.Thread._

object Main {
def main(args: Array[String]) = {
// scala.actors.Actorの関数。Actorを生成する
val anActor = actor {
//reactは一度メッセージを受け取ると処理を抜けるのでループ
loop {
react {
case msg => {
println("Begin: " + msg)
sleep(1000)
println("End: " + msg)
}
}
}
}

println("put A")
anActor ! "A"
println("put B")
anActor ! "B"
println("put C")
anActor ! "C"
}
}

 
実行結果

put A
put B
put C
Begin: A
End: A
Begin: B
End: B
Begin: C
End: C


要求が順番に取り出されて実行されている。