1. Obtener las sentencias cobegin/end del grafo de precedencia

Anuncio
1.
Obtener las sentencias cobegin/end del grafo
de precedencia siguiente utilizando semáforos.
(ejemplo anterior)
2. Realizar el programa en Java que permita enviar
los mensajes de cada proceso según entren a la
sección critica mandando el mensaje soy el
proceso #1 y la instrucción s# utilizando
semáforos. (crear el semáforo)
BEGIN
S1
COBEGIN
BEGIN
S1;
Signal(a);
Signal(b);
END
S2
BEGIN
Wait(a);
S2;
END
S3
BEGIN
Wait(b);
S3;
Signal(e);
END
S4
BEGIN
S4;
Signal(c);
Signal(d);
END
S5
BEGIN
Wait(5);
S5;
Signal(f);
END
S6
BEGIN
Wait(d);
S6;
Signal(g);
END
S7
BEGIN
Wait(f);
Wait(g);
S7;
END
COEND
END
public class Semaphore
{
private int count;
public Semaphore(int n) {
this.count = n; }
public synchronized void WAIT()
{
while(count == 0) {
try
{
wait();
}
catch (InterruptedException e) {//keep trying}
}
count--;
}
}
public synchronized void SIGNAL()
{
count++;
notify();
}
}
public class p1 extends Thread{
static Semaphore a,b;
public p1(Semaphore a, Semaphore b) {
this.a = a;
this.b = b;
}
public void run(){
System.out.println("Soy el proceso #1 y la instruccion S1");
a.SIGNAL();
b.SIGNAL();
}
}
public class p2 extends Thread{
static Semaphore a;
public p2(Semaphore a) {
this.a = a;
}
public void run(){
a.WAIT();
System.out.println("Soy el proceso #2 y la instruccion S2");
}
}
public class p3 extends Thread{
static Semaphore e,b;
public p3(Semaphore b, Semaphore e) {
this.b = b;
this.e = e;
}
public void run(){
b.WAIT();
System.out.println("Soy el proceso #3 y la instruccion S3");
e.SIGNAL();
}
}
public class p4 extends Thread{
static Semaphore c,d;
public p4(Semaphore c, Semaphore d) {
this.c = c;
this.d = d;
}
public void run(){
System.out.println("Soy el proceso #4 y la instruccion S4");
c.SIGNAL();
d.SIGNAL();
}
}
public class p5 extends Thread{
static Semaphore c,f;
public p5(Semaphore c, Semaphore f) {
this.c = c;
this.f = f;
}
public void run(){
c.WAIT();
System.out.println("Soy el proceso #5 y la instruccion S5");
f.SIGNAL();
}
}
public class p6 extends Thread{
static Semaphore d,e,g;
public p6(Semaphore d, Semaphore e, Semaphore g) {
this.d = d;
this.e = e;
this.g = g;
}
public void run(){
d.WAIT();
e.WAIT();
System.out.println("Soy el proceso #6 y la instruccion S6");
g.SIGNAL();
}
}
public class p7 extends Thread{
static Semaphore f,g;
public p7(Semaphore f, Semaphore g) {
this.f = f;
this.g = g;
}
public void run(){
f.WAIT();
g.WAIT();
System.out.println("Soy el proceso #7 y la instruccion S7");
}
}
public class Procesos{
public Procesos() {
}
public static void main (String[] args) {
Semaphore a=new Semaphore(1);
Semaphore b=new Semaphore(1);
Semaphore c=new Semaphore(0);
Semaphore d=new Semaphore(0);
Semaphore e=new Semaphore(0);
Semaphore f=new Semaphore(0);
Semaphore g=new Semaphore(0);
p1 proceso1=new p1(a,b);
p2 proceso2=new p2(a);
p3 proceso3=new p3(b,e);
p4 proceso4=new p4(c,d);
p5 proceso5=new p5(c,f);
p6 proceso6=new p6(d,e,g);
p7 proceso7=new p7(f,g);
proceso1.start();
proceso2.start();
proceso3.start();
proceso4.start();
proceso5.start();
proceso6.start();
proceso7.start();
}
}
Descargar