posso usare boost::lock_guard
di acquisire un blocco su un oggetto boost::mutex
e questo meccanismo verificherà che una volta che il boost::lock_guard
passa nell'ambito uscirà serratura:Come utilizzare un lock_guard con try_lock_for
{
boost::lock_guard<boost::mutex> lock(a_mutex);
// Do the work
}
In questo case, a_mutex
verrà rilasciato indipendentemente dal fatto che il blocco di codice sia stato chiuso da un'eccezione o meno.
D'altra parte, un boost::timed_mutex
supporta anche un metodo try_lock_for(period)
, ad es.
if(a_timed_mutex.try_lock_for(boost::chrono::seconds(1))) {
// Do the work
a_timed_mutex.unlock(); // <- This is needed!
} else {
// Handle the acquisition failure
}
Questo codice non sarà unlock()
il a_timed_mutex
se il true
blocco della dichiarazione if
si esce con un'eccezione.
Domanda: Boost (e, per quanto posso vedere, né il C++ 11 standard) non sembrano offrire una variante di lock_guard
che funziona con try_lock()
o try_lock_for(period)
. Qual è il modo "consigliato" o la migliore pratica per gestire la seconda situazione?