PDA

View Full Version : Gestione coda numerata nei THREAD


caramelleamare
08-02-2016, 11:44
In ambito di gestione dei thread in linguaggio C, come posso fare per gestire una coda numerata di thread? Dove cioè devo indicare quale sarà esattamente il thread successivo ad accedere alla mutex.
Mi spiego: io so quale thread può accedere alla mutex grazie ad una variabile globale, se non è il suo turno lo metto in wait. Molti altri thread però saranno in wait e verranno richiamati con una broadcast. Qui non capisco come gestire la cosa: i thread risvegliati controllano ognuno se possono accedere, cioè se il loro turno. Se possono accedono alla mutex altrimenti tornano in wait. Ma in questo dovrei scrivere una serie infinita di wait, o perlomeno di numero pari al numero di thread lanciati. Assurdo. Come si gestisce questa situazione?

sottovento
09-02-2016, 07:51
Io utilizzerei due mutex: una per la sezione critica (nel caso altri thread - oltre a quelli che vuoi sequenziare - possano accedervi) ed una per il sequenziamento.
Ovviamente se solo i thread sequenziati possono accedere alla sezione critica, allora un solo mutex e' sufficiente.

Farei una cosa del genere

acquisisciMutex(M1); // uno solo acquisisce, gli altri aspettano
se (mio turno)
{
acquisisciMutex(M2);
eseguiSezioneCritica();
rilasciaMutex(M2);
}
rilasciaMutex(M1);

Nel caso un thread sbagliato riesca ad acquisire M1, lo rilascera' subito