elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Monitores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Monitores  (Leído 12,219 veces)
bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Monitores
« en: 8 Octubre 2011, 04:15 am »

El barbero dormilón, Una peluquería tiene un barbero, una silla de peluquero y n sillas para que se sienten los clientes en espera, si es que los hay. Si no hay clientes presentes, el barbero se sienta en su silla de peluquero y se duerme. Cuando llega un cliente, este debe despertar al barbero dormilón. Si llegan más clientes mientras el barbero corta el cabello de un cliente, estos deben esperar sentados (si hay sillas desocupadas) o salirse de la peluquería (si todas las sillas están ocupadas). El problema consiste en programar al barbero y los clientes sin entrar en condición de competencia.

Alguna pregunta ??? podeis hacerla con toda confianza!!!
Código:
import java.lang.InterruptedException;
public class Barberia
{
    int contador;
    public Barberia(int contador){
    this.contador=contador;
    }
    
    
    public synchronized void atenderCliente(){
      
    if(contador==0){
        try{
        wait();
    }
    catch (InterruptedException e){
        e.printStackTrace();}
        contador++;
    }
    else if(contador>=1){
    notify();
    }
    }
    
    public synchronized void llegarCliente(){
       int copia =contador;
    if(contador==copia){
        try{
        wait();
    }
    catch (InterruptedException e){
        e.printStackTrace();}
        contador--;
    }
    else if(contador<copia){
    notify();
    }
    
    }
}




Código:
import java.lang.Thread;
import java.lang.InterruptedException;
public class Barbero extends Thread{
Barberia barberia;

public Barbero(Barberia barberia){
this.barberia=barberia;
}

public void run(){
while(true){
barberia.atenderCliente();
try{
sleep(5000);
}
catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("atendio a un cliente");
}


}
  
}






Código:
import java.lang.Thread;
import java.lang.InterruptedException;
public class Cliente extends Thread{

    Barberia barberia;

public Cliente(Barberia barberia){
this.barberia=barberia;
}

public void run(){
while(true){
barberia.llegarCliente();

System.out.println("llego un cliente");
}


}
}




Código:
import java.io.IOException;
public class PruebaBarberia
{
public static void main(String args[])throws IOException {
Barberia barberia;
Barbero barbero;
Cliente cliente;
barberia=new Barberia(20);
cliente=new Cliente(barberia);
cliente.start();
barbero=new Barbero(barberia);
barbero.start();
}
    
}

Alguna pregunta ??? podeis hacerla con toda confianza!!!


« Última modificación: 8 Octubre 2011, 04:31 am por bj Wilson A » En línea

bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Re: Monitores
« Respuesta #1 en: 8 Octubre 2011, 04:33 am »

Lectores y escritores, imaginemos una enorme base de datos, como por ejemplo un sistema de reservaciones de en una línea aérea, con muchos procesos en competencia, que intentan leer y escribir en ella. Se puede aceptar que varios procesos lean la base de datos al mismo tiempo, pero si uno de los procesos está escribiendo, (es decir modificando) la base de datos, ninguno de los demás procesos deberá tener acceso a esta, ni siquiera los lectores. El problema es como programar a los lectores y escritores.

ayuda con el algoritmo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


« Última modificación: 11 Octubre 2011, 16:21 pm por bjpenn » En línea

bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Re: Monitores
« Respuesta #2 en: 8 Octubre 2011, 04:34 am »

Productor/Consumidor, También conocido como bounded buffer problem o problema del buffer limitado. Dos procesos comparten un almacén (buffer) de tamaño fijo. Uno de ellos, el productor, coloca información en el almacén (buffer) mientras que el otro, el consumidor, la obtiene de él. Si el productor desea colocar un nuevo elemento, y el almacén se encuentra lleno, este deberá irse a \dormir". El consumidor despertara al productor cuando elimine un elemento del almacén. De forma análoga, si el almacén esta vacio y el consumidor desea eliminar un elemento del almacén, este debe \dormirse" hasta que el productor coloque algo en el almacén.
En línea

bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Re: Monitores
« Respuesta #3 en: 8 Octubre 2011, 04:39 am »

Juego de ping pong


Código:
import java.lang.InterruptedException;
public class Arbitro
{
    int contador;
    public Arbitro(){
    contador=0;
    }
    public synchronized void  hacerPing(){
    if(contador==0){
        try{
            wait();
            contador++;
        }catch (InterruptedException e){
            e.printStackTrace();
        }
       
    }
    else if(contador==1){
    notify();
   
    }
}
    public synchronized void  hacerPong(){
    if(contador==1){
        try{
            wait();
            contador++;
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        contador--;
    }
    else if(contador==0){
    notify();
   
    }
    }
}




Código:
import java.lang.Thread;
import java.lang.InterruptedException;
public class Jugador1 extends Thread
{
   Arbitro arbitro;
   public Jugador1(Arbitro arbitro){
    this.arbitro=arbitro;
    }
    public void run(){
    while(true){
        arbitro.hacerPing();
        try{
            sleep(5000);
        }catch (InterruptedException e){
            e.printStackTrace();}
        System.out.println("respondio con un Ping 1");
    }
    }
}


Código:
import java.lang.Thread;
public class Jugador2 extends Thread
{
   Arbitro arbitro;
   public Jugador2(Arbitro arbitro){
    this.arbitro=arbitro;
 
    }
    public void run(){
    while(true){ 
       arbitro.hacerPong();
       
        System.out.println("respondio con un Pong 1");
    }
    }
}




Código:
import java.lang.Thread;
import java.lang.InterruptedException;
public class Jugador3 extends Thread
{
   Arbitro arbitro;
   public Jugador3(Arbitro arbitro){
    this.arbitro=arbitro;
    }
    public void run(){
    while(true){
        arbitro.hacerPing();
        try{
            sleep(5000);
        }catch (InterruptedException e){
            e.printStackTrace();}
        System.out.println("respondio con un Ping 2");
    }
    }
}



Código:
import java.lang.Thread;
import java.lang.InterruptedException;
public class Jugador4 extends Thread
{
   Arbitro arbitro;
   public Jugador4(Arbitro arbitro){
    this.arbitro=arbitro;
    }
    public void run(){
    while(true){
        arbitro.hacerPong();
        System.out.println("respondio con un Pong 2");
    }
    }
}



Código:
import java.io.IOException;
public class Prueba1
{
public static void main(String args[]) throws IOException {
   Arbitro arbitro;
   Jugador1 jugador1;
   Jugador2 jugador2;
   Jugador3 jugador3;
   Jugador4 jugador4;
   arbitro= new Arbitro();
   jugador1= new Jugador1(arbitro);
   jugador1.start();
   jugador2= new Jugador2(arbitro);
   jugador2.start();
   
   jugador3= new Jugador3(arbitro);
   jugador3.start();
   
   
   jugador4= new Jugador4(arbitro);
   jugador4.start();
}
}
En línea

Damian100

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Monitores
« Respuesta #4 en: 25 Octubre 2011, 20:50 pm »

HErmano  haber si me indicas como corre paso a paso en java como es que actuan el contador del barbero esta chevere el codigo lo entendi pero quiero una explicacion de ejecucion por favor ok se te agradece.
En línea

bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Re: Monitores
« Respuesta #5 en: 26 Octubre 2011, 04:24 am »

HErmano  haber si me indicas como corre paso a paso en java como es que actuan el contador del barbero esta chevere el codigo lo entendi pero quiero una explicacion de ejecucion por favor ok se te agradece.

bueno 1) el metodo wait() es para bloquear al proceso
          2) el metodo notify() libera al proceso y siempre tiene que ser el ultimo en ser invocado

luego todo es simple logica del enunciado vale...
con eso creo que entenderas y tendras pequenas dudas

postea tus dudas especificas gracias bye
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
3 MONITORES « 1 2 3 »
Hardware
Pirat3net 28 19,540 Último mensaje 15 Junio 2011, 22:56 pm
por Artikbot
Que tal estas RAM y Monitores?
Hardware
Jnex 8 4,543 Último mensaje 10 Abril 2012, 15:53 pm
por Aprendiz-Oscuro
Dos monitores con iGPU y puerto DVI-I de la GPU
Hardware
LightHades 1 2,079 Último mensaje 7 Enero 2014, 19:30 pm
por el-brujo
monitores con diferente color
Hardware
gAb1 2 1,933 Último mensaje 22 Enero 2014, 02:54 am
por raul338
Ayuda dos monitores ubuntu 12.04 LTS
GNU/Linux
marrison 1 1,694 Último mensaje 29 Noviembre 2015, 11:28 am
por hdarko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines