Я использую boost::interpocess::scoped_lock
, используя named_mutex
и timeout
; Я работаю в ОС Linux.
Во время одного из моих тестов у меня произошел сбой: с тех пор каждый раз, когда я пытаюсь снова запустить приложение, оно зависает на том месте, где я создал блокировку; похоже, что мьютекс каким-то образом остался приобретенным (никакой возможный процесс, использующий его, не запущен).
Вдобавок ко всему, если вы посмотрите на приведенный ниже код, я ожидаю, что через 150 микросекунд синхронизированный scoped_lock
вернется, чтобы дать мне ошибку ... но это не так ... он просто зависает.
#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;
}
....
Мои вопросы следующие:
- Как убедиться, что именованный мьютекс
boost::interprocess
уничтожен? (так как увидеть общий мьютекс между процессами и как их уничтожить) - Почему получение мьютекса не возвращается через 150 микросекунд? Что-то не так в приведенном ниже коде?
Большое спасибо
АФГ