SlideShare una empresa de Scribd logo
BENEMERITA UNIVERSIDAD
 AUTONOMA DE PUEBLA




 FACULTAD DE CIENCIAS
  DE LA COMPUTACION




  PROGRAMACION CONCURRENTE Y PARALELA




        PROGRAMAS DE MONITORES
LEZAMA SANCHEZ ANA LAURA
                                                                                                  H




Introducción:

En esta práctica se realizaron 4 programas con monitores

Desarrollo:

El primer programa es el mismo que el de la práctica 4, donde se simula el retiro y deposito de
dinero.

public class cliente1 implements Runnable

{

       private Monitor_Cajero caja1;



       public cliente1(Monitor_Cajero A)

                {

                       this.caja1=A;



                }

       public void run()

                {
int cantidad;

                         for (int i=0; i<5; i++)

                                  {

                                           do

                                                   {

                                                           cantidad=((int)(Math.random()*1000));

                                                   }

                                                   while (cantidad<1 || cantidad>1000);

                                                   System.out.println ("Retirando: "+cantidad);

                                                   caja1.retira(cantidad);



          }

     }

}

public class cliente2 extends Thread

{

         private Monitor_Cajero caja1;



         public cliente2(Monitor_Cajero A)

                 {

                         this.caja1=A;



                 }

         public void run()

                 {

                         int cantidad;
for (int i=0; i<5; i++)

                                {

                                         do

                                                 {

                                                     cantidad=((int)(Math.random()*1000));

            }

            while (cantidad<1 || cantidad>1000);

            System.out.println ("Ingresando: "+cantidad);

            caja1.ingresar(cantidad);



                                }

                }

}

public class Monitor_Cajero

{

       private int cantidad;



       public Monitor_Cajero()

                {

                       cantidad=10000;

                }



       public synchronized void retira(int x)

                {

                       while (cantidad-x <=0)

                                try {wait();}
catch (InterruptedException e)

                                         {

                                                  System.err.println ("Error"+e.toString());

                                         }

                                         cantidad=cantidad-x;

                                         notify();

    }



    public synchronized void ingresar(int x)

        {

                while (cantidad+x>=10000)

                        try {wait();}

                        catch (InterruptedException e){System.err.println ("Error"+e.toString());}

                        cantidad=cantidad+x;

                        notify();

        }

}

//clase principal

import java.io.*;



public class cajeroautomatico

{

        public static void main (String []args)

                {

                        Monitor_Cajero A=new Monitor_Cajero();
cliente1 cli1=new cliente1(A);

                     cliente2 cli2=new cliente2(A);



                     Thread hilo1=new Thread(cli1);

                 Thread hilo2=new Thread(cli2);



                     hilo1.start();

                     hilo2.start();

                 }

}

SALIDA




********************************************************************************

El segundo programa es el mismo que el de la practica 4 pero solo este se presenta con semáforos
y su ejecución es la misma.

public class SemaforoBinario {

         protected int contador = 0;



         public SemaforoBinario (int valorInicial) {

                 contador = valorInicial;

         }
synchronized public void WAIT () {

                 while (contador == 0)

                         try {

                                   wait();

                         }

                         catch (Exception e) {}

                 contador--;

         }



         synchronized public void SIGNAL () {

                 contador = 1;

                 notify();

         }

}

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 cajero

{

           private int cantidad;

           public cajero() {cantidad=10000;}



           public synchronized void retira(int x)

                   {

                           while (cantidad-x <=0)

                                   try {wait();}

                                   catch (InterruptedException e)

                                            {
System.err.println ("Error"+e.toString());

                                         }

                                         cantidad=cantidad-x;

                                         notify();

    }



    public synchronized void ingresar(int x)

        {

                  while (cantidad+x>=10000)

                         try {wait();}

                         catch (InterruptedException e){System.err.println ("Error"+e.toString());}

                         cantidad=cantidad+x;

                         notify();

        }

}

import java.io.*;

class Procesos1

{



protected static final SemaforoBinario SA = new SemaforoBinario(0);

protected static final SemaforoBinario SB = new SemaforoBinario(0);

protected static final SemaforoBinario SC = new SemaforoBinario(0);

protected static final SemaforoBinario SD = new SemaforoBinario(0);

protected static final SemaforoBinario SE = new SemaforoBinario(0);

protected static final SemaforoBinario mutex = new SemaforoBinario(1);
public static void main(String args[]) throws IOException

{

         try

                  {

                         cajero caja=new cajero();

                         Thread cli1 = new Thread(new cliente1(caja));

        Thread cli2 = new Thread(new cliente2(caja));



        cli1.start();

        cli2.start();



        Thread.sleep(300);

    }



    catch (InterruptedException e) {}

    // System.out.println(" Termine...");

    // System.exit(0);

}

}

class cliente1 extends Procesos1 implements Runnable

{

         private cajero caja1;

         public cliente1(cajero x)

                  {

                         this.caja1=x;
}

        public void run()

                 {

                        try

                              {

                                     mutex.WAIT();

                                     int cantidad;

                                     for (int i=0; i<5; i++)

                                                {

                                                        do

                                                               {


        cantidad=((int)(Math.random()*1000));

                                                    }

                                                    while (cantidad<1 || cantidad>1000);

                                                    System.out.println ("Retirando: "+cantidad);

                                                    caja1.retira(cantidad);



             }

             Thread.sleep(500);

                                        mutex.SIGNAL();

                                        SA.SIGNAL();

                              }

                              catch (InterruptedException e) {}

    }

}
public class cliente2 extends Procesos1 implements Runnable

{

       private cajero caja1;



       public cliente2(cajero x)

               {

                       this.caja1=x;

               }



       public void run()

               {

                       try

                       {

                                 mutex.WAIT();

                                 int cantidad;

                           for (int i=0; i<5; i++)

                                 {

                                          do

                                                     {

                                                         cantidad=((int)(Math.random()*1000));

               }

               while (cantidad<1 || cantidad>1000);

               System.out.println ("Ingresando: "+cantidad);

               caja1.ingresar(cantidad);

                                 }

                                 Thread.sleep(500);
mutex.SIGNAL();

                                         SB.SIGNAL();

                                    }

                                catch (InterruptedException e) {}



               }

}



public class cliente3 extends Procesos1 implements Runnable

{

       private cajero caja1;



       public cliente3 (cajero x)

               {

                       this.caja1=x;

               }



       public void run()

               {

                       try

                       {

                                mutex.WAIT();

                                int cantidad;

                                for (int i=0; i<5; i++)

                                         {

                                                  do
{

                                                            cantidad=((int)(Math.random()*1000));

               }

               while (cantidad<1 || cantidad>1000);

               System.out.println ("Ingresando: "+cantidad);

               caja1.ingresar(cantidad);

           }

           Thread.sleep(500);

                                           mutex.SIGNAL();

                                           SB.SIGNAL();

                          }

                                  catch (InterruptedException e) {}

                   }

}

//clase principal

import java.io.*;



public class cajeroautomatico

{

        public static void main (String []args)

                   {

                          cajero caja=new cajero();

                          cliente1 c1=new cliente1(caja);

                          cliente2 c2=new cliente2(caja);

               cliente3 c3=new cliente3(caja);

                          c1.start();
c2.start();

                           c3.start();

                   }

}



Salida




********************************************************************************

El tercer programa es el monitor ejemplo donde desde el cuerpo del código sele asigno una
cantidad de 100 y de acuerdo a las instrucciones se incrementa o decrementa.

public class proceso1 implements Runnable

{

          Monitor_Ejemplo A;

          int i;



    public proceso1(Monitor_Ejemplo A)

          {

                   this.A=A;

                   this.i=100;

      }

      public void run()

      {
A.dec(i);

           A.inc(i);

          A.valor();

      }




}

public class proceso2 implements Runnable

{

           Monitor_Ejemplo A;

           int i;



    public proceso2(Monitor_Ejemplo A)

           {

                       this.A=A;

                       this.i=20;

      }

      public void run()

      {

           A.dec(i);

           A.inc(i);

          A.valor();

      }




}
public class Monitor_Ejemplo

{

          private int dato;



    public Monitor_Ejemplo()

          {

                  dato=10;

      }



      public synchronized void dec(int cant)

      {

          dato=dato-cant;

          System.out.println(dato);

      }



      public synchronized void inc(int cant)

      {

          dato=dato+cant;

          System.out.println(dato);

      }



      public synchronized int valor()

      {

          System.out.println(dato);

          return dato;

      }
}

public class Principal

{

        public static void main(String args[])

                {

                         Monitor_Ejemplo A=new Monitor_Ejemplo();

                         proceso1 pro1=new proceso1(A);

                         proceso2 pro2=new proceso2(A);



                         Thread hilo1=new Thread(pro1);

                         Thread hilo2=new Thread(pro2);



                         hilo1.start();

                         hilo2.start();

        }




    SALIDA
********************************************************************************

El cuarto programa es el monitor incremento donde el único método es el imprimir del al 10, con
2 hilos imprimiendo cada hilo 5 números de forma sincronizada.

public class proceso1 implements Runnable

{

         Monitor_Incremento A;

         int i;



    public proceso1(Monitor_Incremento A)

         {

                  this.A=A;

         }

         public void run()

         {

                  for(int i=1;i<=5;i++)

                  {

                          A.sumaUno();

                  }

         }

}

public class proceso2 implements Runnable

{

         Monitor_Incremento A;

         int i;



    public proceso2(Monitor_Incremento A)
{

                   this.A=A;

          }

          public void run()

          {

                   for(int i=1;i<=5;i++)

                   {

                           A.sumaUno();

                   }

          }

}

public class Monitor_Incremento

{

          private int x;



    public Monitor_Incremento()

          {

                   x=0;

      }

      public synchronized void sumaUno()

      {

          x=x+1;

          System.out.println(x);

      }
}

public class PruebaMonitor

{

         public static void main(String[]args)

         {

                 Monitor_Incremento A=new Monitor_Incremento();

                 proceso1 pro1=new proceso1(A);

                 proceso2 pro2=new proceso2(A);

                 Thread hilo1=new Thread(pro1);

                 Thread hilo2=new Thread(pro2);



                 hilo1.start();

                 hilo2.start();

         }

}

SALIDA




*******************************************************************************

Conclusión:
En la elaboración de estos programas se asimilo de mejor forma el concepto de monitor



Bibliografia

http://www.cs.buap.mx/~mceron/principal_con.html

Más contenido relacionado

La actualidad más candente

Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
jubacalo
 
Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
josesan999
 
Aplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - ConsolaAplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - Consola
José Antonio Sandoval Acosta
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
Jonathan Israel
 
Ejercicios en java
Ejercicios en javaEjercicios en java
Ejercicios en java
Jhonny Tenesaca
 
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
José Antonio Sandoval Acosta
 
Lenguajec++
Lenguajec++Lenguajec++
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
Riki Tapia
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
Riki Tapia
 
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
luis freddy
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
Jaime amambal
 
Programa en java para calcular promedios
Programa en java para calcular promediosPrograma en java para calcular promedios
Programa en java para calcular promedios
Carmen Nereira
 
Codigo ejercicios
Codigo ejerciciosCodigo ejercicios
Codigo ejercicios
luis_umg2011
 
Ejemplos java
Ejemplos javaEjemplos java
Ejemplos java
cesarparrales24
 
Ejercicios
EjerciciosEjercicios
Ejercicios
Ezmee XD
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
jubacalo
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
Carlos A. Iglesias
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
Javier Cuenca
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
nluaces
 

La actualidad más candente (19)

Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
 
Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
 
Aplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - ConsolaAplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - Consola
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 
Ejercicios en java
Ejercicios en javaEjercicios en java
Ejercicios en java
 
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
 
Lenguajec++
Lenguajec++Lenguajec++
Lenguajec++
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
3 desarollo manejo datos capitulo 4 -02 aplicaciones colecciones
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
 
Programa en java para calcular promedios
Programa en java para calcular promediosPrograma en java para calcular promedios
Programa en java para calcular promedios
 
Codigo ejercicios
Codigo ejerciciosCodigo ejercicios
Codigo ejercicios
 
Ejemplos java
Ejemplos javaEjemplos java
Ejemplos java
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
 
Ejercicios de programación.
Ejercicios de programación.Ejercicios de programación.
Ejercicios de programación.
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 

Destacado

Presentación1
Presentación1Presentación1
Presentación1
jltgetac
 
Movimentação de VMs para Microsoft Azure
Movimentação de VMs para Microsoft AzureMovimentação de VMs para Microsoft Azure
Movimentação de VMs para Microsoft Azure
Vinícius Apolinário
 
Pateo pilancones
Pateo pilanconesPateo pilancones
Pateo pilancones
LUISMAR2006
 
Varadero
VaraderoVaradero
Ao no exorcist mangá 007
Ao no exorcist   mangá 007Ao no exorcist   mangá 007
Ao no exorcist mangá 007Vitorblog
 
Modulo de angulos teed4018
Modulo de angulos teed4018Modulo de angulos teed4018
Modulo de angulos teed4018
jeannettel
 
En Shifan Chen ens ensenya imatges de la Xina
En Shifan Chen ens ensenya imatges de la XinaEn Shifan Chen ens ensenya imatges de la Xina
En Shifan Chen ens ensenya imatges de la Xinaacollidamontascopa
 
Rishav i Sukhharmanpreet ens presenten l'Índia
Rishav i Sukhharmanpreet ens presenten l'ÍndiaRishav i Sukhharmanpreet ens presenten l'Índia
Rishav i Sukhharmanpreet ens presenten l'Índiaacollidamontascopa
 
Projeto memória na bei
Projeto memória na beiProjeto memória na bei
Projeto memória na beilabteotonio
 
Portfolio Eric de Vos
Portfolio Eric de VosPortfolio Eric de Vos
Portfolio Eric de Vos
ericdevosNL
 
Heartland & Theodore Roosevelt Expressway
Heartland & Theodore Roosevelt ExpresswayHeartland & Theodore Roosevelt Expressway
Heartland & Theodore Roosevelt Expressway
Ports-To-Plains Blog
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
teannamarie
 
Diploma5
Diploma5Diploma5
Diploma5
jersonbaque
 
Tumores malignos de piel
Tumores malignos de pielTumores malignos de piel
Tumores malignos de piel
Lotty Piñero Garrett
 
Welcome to hotel nasa
Welcome to hotel  nasaWelcome to hotel  nasa
Welcome to hotel nasa
Nasahillhotel Nasa
 

Destacado (20)

Presentación1
Presentación1Presentación1
Presentación1
 
Movimentação de VMs para Microsoft Azure
Movimentação de VMs para Microsoft AzureMovimentação de VMs para Microsoft Azure
Movimentação de VMs para Microsoft Azure
 
Pateo pilancones
Pateo pilanconesPateo pilancones
Pateo pilancones
 
Varadero
VaraderoVaradero
Varadero
 
Ao no exorcist mangá 007
Ao no exorcist   mangá 007Ao no exorcist   mangá 007
Ao no exorcist mangá 007
 
Pràctiques del tema 3
Pràctiques del tema 3Pràctiques del tema 3
Pràctiques del tema 3
 
Modulo de angulos teed4018
Modulo de angulos teed4018Modulo de angulos teed4018
Modulo de angulos teed4018
 
En Shifan Chen ens ensenya imatges de la Xina
En Shifan Chen ens ensenya imatges de la XinaEn Shifan Chen ens ensenya imatges de la Xina
En Shifan Chen ens ensenya imatges de la Xina
 
Rishav i Sukhharmanpreet ens presenten l'Índia
Rishav i Sukhharmanpreet ens presenten l'ÍndiaRishav i Sukhharmanpreet ens presenten l'Índia
Rishav i Sukhharmanpreet ens presenten l'Índia
 
Projeto memória na bei
Projeto memória na beiProjeto memória na bei
Projeto memória na bei
 
Align trex 600 n
Align trex 600 nAlign trex 600 n
Align trex 600 n
 
Portfolio Eric de Vos
Portfolio Eric de VosPortfolio Eric de Vos
Portfolio Eric de Vos
 
Heartland & Theodore Roosevelt Expressway
Heartland & Theodore Roosevelt ExpresswayHeartland & Theodore Roosevelt Expressway
Heartland & Theodore Roosevelt Expressway
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
 
Diploma5
Diploma5Diploma5
Diploma5
 
Tumores malignos de piel
Tumores malignos de pielTumores malignos de piel
Tumores malignos de piel
 
Annual report2004
Annual report2004Annual report2004
Annual report2004
 
2
22
2
 
Welcome to hotel nasa
Welcome to hotel  nasaWelcome to hotel  nasa
Welcome to hotel nasa
 
Presentecion valentin
Presentecion valentinPresentecion valentin
Presentecion valentin
 

Similar a Reporte viernes 24

Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Antares Zehcnas
 
Shellresumen
ShellresumenShellresumen
Prueba try
Prueba tryPrueba try
Prueba try
Pablo Macon
 
Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012
ecuatareas
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
diegocastro1234
 
Java
JavaJava
Java
jbersosa
 
Cecytem
CecytemCecytem
Cecytem
Miky Lopez
 
Try catch
Try catchTry catch
Try catch
jbersosa
 
Guia para examen java
Guia para examen javaGuia para examen java
Guia para examen java
tecno5
 
Guia para examen java
Guia para examen javaGuia para examen java
Guia para examen java
tecno5
 
Laboratorio de algoritmos
Laboratorio de algoritmosLaboratorio de algoritmos
Laboratorio de algoritmos
Christian10532
 
Bucles y switch
Bucles y switchBucles y switch
Bucles y switch
Jorge García Hrnández
 
Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01
Leonel Martinez Carrion
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
Leonel Martinez Carrion
 
Portafolio segundo parcial
Portafolio segundo parcialPortafolio segundo parcial
Portafolio segundo parcial
Hugo Arechiga
 
Java problems
Java problemsJava problems
Java problems
Noe Lopez
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
Amado Arcaya
 
Try catch-finally
Try catch-finallyTry catch-finally
Try catch-finally
jbersosa
 
Evaluación prog iii try catch
Evaluación prog iii try catchEvaluación prog iii try catch
Evaluación prog iii try catch
jbersosa
 
Practica 10
Practica 10Practica 10
Practica 10
Doris Aguagallo
 

Similar a Reporte viernes 24 (20)

Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
 
Shellresumen
ShellresumenShellresumen
Shellresumen
 
Prueba try
Prueba tryPrueba try
Prueba try
 
Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
 
Java
JavaJava
Java
 
Cecytem
CecytemCecytem
Cecytem
 
Try catch
Try catchTry catch
Try catch
 
Guia para examen java
Guia para examen javaGuia para examen java
Guia para examen java
 
Guia para examen java
Guia para examen javaGuia para examen java
Guia para examen java
 
Laboratorio de algoritmos
Laboratorio de algoritmosLaboratorio de algoritmos
Laboratorio de algoritmos
 
Bucles y switch
Bucles y switchBucles y switch
Bucles y switch
 
Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
 
Portafolio segundo parcial
Portafolio segundo parcialPortafolio segundo parcial
Portafolio segundo parcial
 
Java problems
Java problemsJava problems
Java problems
 
Estructuras de control en la POO
Estructuras de control en la POOEstructuras de control en la POO
Estructuras de control en la POO
 
Try catch-finally
Try catch-finallyTry catch-finally
Try catch-finally
 
Evaluación prog iii try catch
Evaluación prog iii try catchEvaluación prog iii try catch
Evaluación prog iii try catch
 
Practica 10
Practica 10Practica 10
Practica 10
 

Reporte viernes 24

  • 1. BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACION PROGRAMACION CONCURRENTE Y PARALELA PROGRAMAS DE MONITORES
  • 2. LEZAMA SANCHEZ ANA LAURA H Introducción: En esta práctica se realizaron 4 programas con monitores Desarrollo: El primer programa es el mismo que el de la práctica 4, donde se simula el retiro y deposito de dinero. public class cliente1 implements Runnable { private Monitor_Cajero caja1; public cliente1(Monitor_Cajero A) { this.caja1=A; } public void run() {
  • 3. int cantidad; for (int i=0; i<5; i++) { do { cantidad=((int)(Math.random()*1000)); } while (cantidad<1 || cantidad>1000); System.out.println ("Retirando: "+cantidad); caja1.retira(cantidad); } } } public class cliente2 extends Thread { private Monitor_Cajero caja1; public cliente2(Monitor_Cajero A) { this.caja1=A; } public void run() { int cantidad;
  • 4. for (int i=0; i<5; i++) { do { cantidad=((int)(Math.random()*1000)); } while (cantidad<1 || cantidad>1000); System.out.println ("Ingresando: "+cantidad); caja1.ingresar(cantidad); } } } public class Monitor_Cajero { private int cantidad; public Monitor_Cajero() { cantidad=10000; } public synchronized void retira(int x) { while (cantidad-x <=0) try {wait();}
  • 5. catch (InterruptedException e) { System.err.println ("Error"+e.toString()); } cantidad=cantidad-x; notify(); } public synchronized void ingresar(int x) { while (cantidad+x>=10000) try {wait();} catch (InterruptedException e){System.err.println ("Error"+e.toString());} cantidad=cantidad+x; notify(); } } //clase principal import java.io.*; public class cajeroautomatico { public static void main (String []args) { Monitor_Cajero A=new Monitor_Cajero();
  • 6. cliente1 cli1=new cliente1(A); cliente2 cli2=new cliente2(A); Thread hilo1=new Thread(cli1); Thread hilo2=new Thread(cli2); hilo1.start(); hilo2.start(); } } SALIDA ******************************************************************************** El segundo programa es el mismo que el de la practica 4 pero solo este se presenta con semáforos y su ejecución es la misma. public class SemaforoBinario { protected int contador = 0; public SemaforoBinario (int valorInicial) { contador = valorInicial; }
  • 7. synchronized public void WAIT () { while (contador == 0) try { wait(); } catch (Exception e) {} contador--; } synchronized public void SIGNAL () { contador = 1; notify(); } } class Semaphore { private int count; public Semaphore(int n) { this.count = n; } public synchronized void WAIT() { while(count == 0) {
  • 8. try { wait(); } catch (InterruptedException e) {//keep trying} } count--; } } public synchronized void SIGNAL() { count++; notify(); } } public class cajero { private int cantidad; public cajero() {cantidad=10000;} public synchronized void retira(int x) { while (cantidad-x <=0) try {wait();} catch (InterruptedException e) {
  • 9. System.err.println ("Error"+e.toString()); } cantidad=cantidad-x; notify(); } public synchronized void ingresar(int x) { while (cantidad+x>=10000) try {wait();} catch (InterruptedException e){System.err.println ("Error"+e.toString());} cantidad=cantidad+x; notify(); } } import java.io.*; class Procesos1 { protected static final SemaforoBinario SA = new SemaforoBinario(0); protected static final SemaforoBinario SB = new SemaforoBinario(0); protected static final SemaforoBinario SC = new SemaforoBinario(0); protected static final SemaforoBinario SD = new SemaforoBinario(0); protected static final SemaforoBinario SE = new SemaforoBinario(0); protected static final SemaforoBinario mutex = new SemaforoBinario(1);
  • 10. public static void main(String args[]) throws IOException { try { cajero caja=new cajero(); Thread cli1 = new Thread(new cliente1(caja)); Thread cli2 = new Thread(new cliente2(caja)); cli1.start(); cli2.start(); Thread.sleep(300); } catch (InterruptedException e) {} // System.out.println(" Termine..."); // System.exit(0); } } class cliente1 extends Procesos1 implements Runnable { private cajero caja1; public cliente1(cajero x) { this.caja1=x;
  • 11. } public void run() { try { mutex.WAIT(); int cantidad; for (int i=0; i<5; i++) { do { cantidad=((int)(Math.random()*1000)); } while (cantidad<1 || cantidad>1000); System.out.println ("Retirando: "+cantidad); caja1.retira(cantidad); } Thread.sleep(500); mutex.SIGNAL(); SA.SIGNAL(); } catch (InterruptedException e) {} } }
  • 12. public class cliente2 extends Procesos1 implements Runnable { private cajero caja1; public cliente2(cajero x) { this.caja1=x; } public void run() { try { mutex.WAIT(); int cantidad; for (int i=0; i<5; i++) { do { cantidad=((int)(Math.random()*1000)); } while (cantidad<1 || cantidad>1000); System.out.println ("Ingresando: "+cantidad); caja1.ingresar(cantidad); } Thread.sleep(500);
  • 13. mutex.SIGNAL(); SB.SIGNAL(); } catch (InterruptedException e) {} } } public class cliente3 extends Procesos1 implements Runnable { private cajero caja1; public cliente3 (cajero x) { this.caja1=x; } public void run() { try { mutex.WAIT(); int cantidad; for (int i=0; i<5; i++) { do
  • 14. { cantidad=((int)(Math.random()*1000)); } while (cantidad<1 || cantidad>1000); System.out.println ("Ingresando: "+cantidad); caja1.ingresar(cantidad); } Thread.sleep(500); mutex.SIGNAL(); SB.SIGNAL(); } catch (InterruptedException e) {} } } //clase principal import java.io.*; public class cajeroautomatico { public static void main (String []args) { cajero caja=new cajero(); cliente1 c1=new cliente1(caja); cliente2 c2=new cliente2(caja); cliente3 c3=new cliente3(caja); c1.start();
  • 15. c2.start(); c3.start(); } } Salida ******************************************************************************** El tercer programa es el monitor ejemplo donde desde el cuerpo del código sele asigno una cantidad de 100 y de acuerdo a las instrucciones se incrementa o decrementa. public class proceso1 implements Runnable { Monitor_Ejemplo A; int i; public proceso1(Monitor_Ejemplo A) { this.A=A; this.i=100; } public void run() {
  • 16. A.dec(i); A.inc(i); A.valor(); } } public class proceso2 implements Runnable { Monitor_Ejemplo A; int i; public proceso2(Monitor_Ejemplo A) { this.A=A; this.i=20; } public void run() { A.dec(i); A.inc(i); A.valor(); } }
  • 17. public class Monitor_Ejemplo { private int dato; public Monitor_Ejemplo() { dato=10; } public synchronized void dec(int cant) { dato=dato-cant; System.out.println(dato); } public synchronized void inc(int cant) { dato=dato+cant; System.out.println(dato); } public synchronized int valor() { System.out.println(dato); return dato; }
  • 18. } public class Principal { public static void main(String args[]) { Monitor_Ejemplo A=new Monitor_Ejemplo(); proceso1 pro1=new proceso1(A); proceso2 pro2=new proceso2(A); Thread hilo1=new Thread(pro1); Thread hilo2=new Thread(pro2); hilo1.start(); hilo2.start(); } SALIDA
  • 19. ******************************************************************************** El cuarto programa es el monitor incremento donde el único método es el imprimir del al 10, con 2 hilos imprimiendo cada hilo 5 números de forma sincronizada. public class proceso1 implements Runnable { Monitor_Incremento A; int i; public proceso1(Monitor_Incremento A) { this.A=A; } public void run() { for(int i=1;i<=5;i++) { A.sumaUno(); } } } public class proceso2 implements Runnable { Monitor_Incremento A; int i; public proceso2(Monitor_Incremento A)
  • 20. { this.A=A; } public void run() { for(int i=1;i<=5;i++) { A.sumaUno(); } } } public class Monitor_Incremento { private int x; public Monitor_Incremento() { x=0; } public synchronized void sumaUno() { x=x+1; System.out.println(x); }
  • 21. } public class PruebaMonitor { public static void main(String[]args) { Monitor_Incremento A=new Monitor_Incremento(); proceso1 pro1=new proceso1(A); proceso2 pro2=new proceso2(A); Thread hilo1=new Thread(pro1); Thread hilo2=new Thread(pro2); hilo1.start(); hilo2.start(); } } SALIDA ******************************************************************************* Conclusión:
  • 22. En la elaboración de estos programas se asimilo de mejor forma el concepto de monitor Bibliografia http://www.cs.buap.mx/~mceron/principal_con.html