Originariamente inviato da Cecca
Salve a tutti
Il mio problema è in linea di massima piuttosto semplice...ho:
public class SynchPort <T>
contente un metodo send e receive. Tramite questa classe un thread mittente invia (send) un messaggio sincronizzandosi col destinatario (receive) (più o meno problema produttori/consumatori).
Il tipo generico T mi crea dei problemi nella receive...
nella send passo l'oggetto per riferimento (ovviamente) e lo assegno alla variabile locale della classe SynchPort
public void send(Thread Threadref, T info){
Main.Mutex.P(Threadref);
this.mittente = Threadref.getName();
this.data = info;
Main.SemCond.V();
}
Lasciate perdere mutex e semcond che sono 'primitive di sincronizzazione' da me implementate a scopo didattico.
e fin qui tutto bene...l'oggetto viene passato e puntato da 'data'.
public void receive(T RecMess , Thread Threadref){
Main.SemCond.P(Threadref);
ProcessoRicevente.mittente = this.mittente;
RecMess = this.data;
Main.Mutex.V();
}
qui la cosa non funziona più (giustamente) perché RecMess è una copia del puntatore passato...
a prescindere dalla bruttezza della soluzione anche per il campo mittente...una cosa analoga per il tipo generico T non andrebbe ovviamente bene...inoltre NON posso usare return dovendo usufruire per motivi di progetto delle funzioni P e V...
come faccio a restituire al thread ricevente il generico oggetto? o in questo caso...a far puntare una sua variabile locale al contenuto di this.data?