Sto usando boost::mutex::scoped_lock
in questo modo:Perché Boost scoped_lock non sblocca il mutex?
void ClassName::FunctionName()
{
{
boost::mutex::scoped_lock scopedLock(mutex_);
//do stuff
waitBoolean=true;
}
while(waitBoolean == true){
sleep(1);
}
//get on with the thread's activities
}
Fondamentalmente imposta waitBoolean, e gli altri segnali di filo che viene fatto impostando waitBoolean false;
Questo non sembra funzionare, tuttavia, perché l'altro thread non può ottenere un blocco su mutex_ !!
Stavo partendo dal presupposto che avvolgendo il campo scoped_lock tra parentesi avrei chiuso il suo blocco. Questo non è il caso? La lettura online dice che rinuncia al mutex solo quando viene chiamato il distruttore. Non verrà distrutto quando uscirà dall'ambito locale?
Segnalazione parte di codice:
while(running_){
boost::mutex::scoped_lock scopedLock(mutex_);
//Run some function that need to be done...
if(waitBoolean){
waitBoolean=false;
}
}
Grazie!
L'oggetto scoped_lock viene distrutto nella parentesi di chiusura e il mutex viene rilasciato. Per favore, pubblica la parte di segnalazione del codice. A proposito, un boost :: condition_variable è migliore per le tue esigenze – neuro
Ben visto il tuo codice di segnalazione può funzionare in certi casi, ma dipende dall'elaborazione che fai (i tuoi commenti). Se c'è un altro synchro è peggio. Una variabile di condizione è il modo per farlo. Ho pubblicato il codice che uso per fare questo tipo di sincronizzazione. – neuro
Il "lavoro" del thread di segnalazione non blocca qualcos'altro. Funziona in modo indipendente. – Alex