Sto utilizzando un boost::interpocess::scoped_lock
utilizzando un named_mutex
e un timeout
; Sono in esecuzione su Linux OS.boost interprocesso denominato mutex rimane acquisito dopo un crash
Durante uno dei miei test ho avuto un crash: da allora, ogni volta che provo a eseguire nuovamente l'applicazione, si blocca sul punto in cui ho creato il blocco; sembra che il mutex sia rimasto acquisito in qualche modo (non è possibile eseguire nessun processo usando questo).
Inoltre, se si guarda il codice seguente, mi aspetto che dopo 150 microsecondi, il tempo scoped_lock
ritorni per darmi un errore..ma questo non è il caso.è appeso solo lì.
#include <boost/interprocess/sync/named_mutex.hpp>
namespace bi = boost::interprocess;
bi::named_mutex m_mutex;
try{
boost::posix_time::ptime pt(
boost::posix_time::microsec_clock::local_time()) ;
pt+= boost::posix_time::microseconds(150);
bi::scoped_lock<bi::named_mutex> lock(m_mutex, pt);
if(!lock.owns()){
FATAL("I didn't acquire the lock.");
return EXIT_FAILURE;
}
....
Le mie domande sono le seguenti:
- Come assicurarsi che
boost::interprocess
nome mutex viene distrutto? (così come vedere il mutex condiviso attraverso i processi e come distruggerli) - Perché l'acquisizione del mutex non ritorna dopo 150 microsecondi? C'è qualcosa di sbagliato nel codice qui sotto?
Grazie mille
AFG
Nel mio caso è rimasto acquisito anche su Windows –