rendered paste bodypackage dje.pas.rw
import scala.actors.Actor;
abstract class Msg;
case class Read(unitId:Int) extends Msg;
case class Write extends Msg;
class MonitorProcess extends Actor{
var belegt:Boolean=false;
def act(){
loop{
react{
case Read(unitId) =>
println("Client mit unitId: "+unitId+" darf jetzt nicht schreiben und liest daher!");
case Write =>
if (belegt==false) {
reply(false);
}
else{
reply(true);
}
}
}
}
def setBelegt(b:Boolean){
belegt=b;
}
}
class Client(id:Int, server:MonitorProcess) extends Actor{
def act(){
while(true){
var b=server!?Write
if(b==false){
server.setBelegt(true);
println("Client "+id+" schreibt jetzt!");
Thread.sleep(5*id);
server.setBelegt(false);
println("Client "+id+" gibt den Schreiber jetzt frei!");
}
else{
server!Read
}
}
}
}
object ActiveMonitorTestApp{
def main(args:Array[String]):Unit={
val server=new MonitorProcess
server.start
for(i<- 100 to 200){
val client=new Client(i, server)
client.start
}
}
}