mutua esclusione-metodo sincronizzati

Stato
Discussione chiusa ad ulteriori risposte.

jackoff

Utente Silver
11 Giugno 2007
23
9
0
65
Main:
Codice:
public class Main {

    
    public static void main (String args[])
    {        Monitor m = new Monitor();
             new Produttore(m);
             new Consumatore(m);
    }
}
Classe Monitor:
Codice:
class Monitor {
    private int unDato;
    private int sem;
    
    public Monitor() {
        sem=0;
    }
   
    public synchronized  int prendi()  
    {        
        
       if (sem!=1)
	 try
	 {
		wait();
	 }
         catch (Exception e){}

        /* se viene eseguito questo codice, significa che il semaforo è a 1
         * cioè il buffer è pieno  */
              
        System.out.println("Preso: " + unDato);
        
         sem=0;              //  il buffer, all'uscita da questo metodo, deve 
                            // risultare vuoto, in quanto il suo valore è stato
                            //  consumato.
        notifyAll();      // sveglia produttore 
               
        return unDato;
    }
    
    public synchronized void metti(int d)
    {        if (sem!=0)
		 try
		 {
			wait();
		 }
                 catch (Exception e){}
        
		/* se viene eseguito questo codice, significa che il semaforo è a 0
         	* cioè il buffer è vuoto */
             unDato = d;
             System.out.println("Depositato: " + unDato);
        
             sem=1;   // segnala che il buffer è pieno     
             notifyAll();  // sveglio consumatore
    }
}
Classe Produttore
Codice:
class Produttore implements Runnable
{    Monitor v;
     Produttore(Monitor m)
     {        v = m;
              new Thread(this, "Produttore").start();
     }
     public void run()
     {        // produce 10 numeri interi qualunque in sequenza
         for(int i = 45; i < 55; i++)
         {            v.metti(i);
                      try 
                      {            Thread.sleep(500);
                      }
                      catch (Exception e) {            }
         }
     }

 }
Classe Consumatore:
Codice:
class Consumatore implements Runnable
{    Monitor v;
     Consumatore(Monitor m)
     {        v =m;
              new Thread(this, "Consumatore").start();
     }
     public void run()
     {        for(int i = 0; i < 10; i++)
              {       
		      System.out.println( v.prendi());
                      try 
		      {
                          Thread.sleep(1000);
                      }
                      catch (Exception e)
                      {            }
              }
     }
}
 
la formattazione del codice è un po' a cazzi suoi!L'altro giorno ho fatto anche una con il buffer in ArrayList con dimensione fissa,creando più produttori e più consumatori!
 
e si...che coincidenza guarda...tanto coincidenza che il mio prof oggi voleva che gli risolvessimo il suo problema di codice senza avere nemmeno un voto....ma guarda un po' XD!
 
pure a me è successa la stessa cosa che coincidenza scommetto che il problema era quello del barbiere addormentato eh... a me ha lasciato il sorgente ora gli do un occhiata :lol:
 
Black_Taz21 ha detto:
jackoff non preoccuparti il tuo codice sta bene....ho l'onore e il piacere di stare in classe con R4z0r_Cr4$H ecco tutto
ah ecco...pensavo che mi stavate pigliando per il culo....bhe ve lo avete salvato.:d
 
cosa il culo o il programma se per il programma io già l'avevo svolto in maniera un po diversa ma basta che funzioni alla fine e poi ci sono tanti altri problemi sulla muta esclusione ad esempio se vuoi perdere un po la testa puoi cercare su zio google il problema del barbiere addormentato o quello dei cinque filosofi sempre se vuoi perdere la testa sia chiaro
 
Stato
Discussione chiusa ad ulteriori risposte.