Schema di generazione dei thread

 

UA

GestoreClienti (porta 50000)(attiva un esecutore in parallelo per ogni richiesta)
Esecutore
AspettaLookUp(aspetta MsgLookUpReply)
AspettaEsecuzione(aspetta MsgExecuted)

Server

Begin(attiva i gestori)

GestoreAreYouAlive(porta 55570)

GestoreEsecuzione(porta 55560)

EseguiAccodati

EseguiContatoreCondiviso

EseguiInvertiStringa

EseguiContaCaratteri

GestoreLookUp(porta 55550)

GestoreFind(porta 55551)

GestoreRecovery (attiva i sottogestori per la gestione dell'anello e del recovery)

Ricevitore(porta 55501)

Segnalatore
WaitAckToken(porta 55510)(aspetta MsgAckToken quando è inviato il Token)
GestoreIMNN(porta 55505)
WaitRelToken(porta 55520)(aspetta MsgReleaseToken)
Recoverer
WaitPreviousAddress (porta 55504)(aspetta l'indirizzo della replica che sarà la sua nuova precedente)

GestoreInserimento(attiva i due sottogestori)
GestoreIAmUp(porta 55580)
GestoreYourNewNext(porta 55581)

GestoreYourNewPrevious (porta 55582)(attivato da Begin quando il Server comincia chiedendo di essere inserito in un anello già esistente)

 

    Le priorità (indicate dal numero tra parentesi) sono crescenti con il numero stesso.

 

 

Sincronizzazione e variabili globali

 

    La sincronizzazione si ottiene attraverso la condivisione di alcune variabili globali. Una parte di esse realizzano la sincronizzazione (del tipo mutua esclusione nell'accesso a quella stessa variabile) attraverso la definizione di tutti i metodi esportati "synchronized".

    Siccome la mutua esclusione è un tipo di sincronizzazione insufficiente per creare meccanismi particolari, è stato costruito un oggetto ad hoc (chiamato Sincro) che viene condiviso dall'insieme di thread che devono sincronizzarsi secondo regole più complesse della mutua esclusione, comei il protocollo di gestione del recovery e dell'anello.

 

 

 

 

 


<< Previous page           Next page >>