Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    11

    Problema Produttore-Consumatore con Timer

    Ho il classico problema Produttore-Consumatore con Buffer con una variante;
    Dovrei modificare la classe Buffer che riporto:
    public class Buffer<T>{
    int n;
    T[] buffer;
    int in=0,out=0,count=0;
    public Buffer(int n){
    this.n=n;buffer=new T[n];
    }
    public synchronized T get(){
    while(count==0)
    try{wait();}catch(InterruptedException e){}
    T risp=buffer[out];out=(out+1)%n;count--;
    notifyAll();
    return risp;
    }
    public synchronized void put(T value){
    while(count==n)
    try{wait();}catch(InterruptedException e){}
    buffer[in]=value;in=(in+1)%n;count++;
    notifyAll();
    }
    }


    La modifica da apportare utilizzando Timer e TimerTask è questa:
    la get deve essere così:
    public T get(long timeout) throws TimeoutException
    Se la get riceve l'oggetto dal buffer entro il timeout OK altrimenti termina in modo anomalo
    lanciando l'eccezione istanza di TimeoutException.

    Qualcuno sà come si fà ?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327

    Moderazione

    Non mi sembra così difficile da fare... dov'è la difficoltà nell'implementare tale metodo?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    11
    Lo so che non è complicato ...
    solo che io non so come si fà!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Vediamo, quindi, di abbozzare un'idea.
    L'idea è quella di prendere il tempo all'entrata del metodo. Quindi controllare se ci sono degli oggetti disponibili. Se non ci sono degli oggetti disponibili, mi metto in attesa.
    Alla fine dell'attesa (quindi ci sono oggetti disponibili) prendo il tempo nuovamente. Faccio una differenza con il tempo preso all'inizio e a questo punto ho due possibilità:

    1) Il tempo di attesa è stato inferiore o al più uguale al numero di millisecondi di validità (passati al metodo)

    2) Il tempo di attesa è stato superiore.

    Nel caso 1 il mio oggetto è buono e lo ritorno. Nel secondo caso, lancio una bella eccezione di tipo TimeoutException.

    Dici che può andare come idea?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    11
    Così va bene ma il problema è che devo usare le classi Timer e TimerTask(è un pezzo di una traccia di esame) di java.util forse per evitare di sospendermi fino alla fine dell'attesa.
    In pratica se il timeout è già scaduto non attendo che qualcuno mi risvegli con notify()
    quando c'è un oggetto nel buffer ma lancio prima l'eccezione .

    Pensi si possa fare ?
    Grazie
    Antonio

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Uhm... sì.
    Non ho mai usato Timer e TimerTask, ma penso proprio che si possa fare.
    Ad esempio puoi schedulare il lancio di una TimeoutException dopo che il tempo specificato come parametro è trascorso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.