Estoy usando un boost::interpocess::scoped_lock
usando un named_mutex
y un timeout
; Me estoy ejecutando en el sistema operativo Linux.impulso interproceso llamado restos mutex adquiridos después de un bloqueo
Durante una de mis pruebas tuve un bloqueo: desde entonces, cada vez que trato de ejecutar nuevamente la aplicación, se atasca en el punto donde creé el bloqueo; parece que el mutex se mantuvo adquirido de alguna manera (no se está ejecutando ningún proceso posible).
Además de eso, si mira el siguiente código, espero que después de 150 microsegundos, el scoped_lock
temporizado vuelva a darme un error ... pero este no es el caso ... simplemente se cuelga allí.
#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;
}
....
Mis preguntas son las siguientes:
- Cómo asegurarse de que
boost::interprocess
mutex llamado se destruye? (Entonces, ¿cómo ver el mutex compartido en los procesos y cómo destruirlos? - ¿Por qué adquirir el mutex no regresa después de 150 microsegundos? ¿Hay algo mal en el código a continuación?
Muchas gracias
AFG
En mi caso, se mantuvo adquirido en Windows también –