межпроцессор boost с именем mutex остается полученным после сбоя

Я использую boost :: interpocess :: scoped_lock , используя named_mutex и тайм-аут ; Я работаю в ОС 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;
      }
     ....

У меня следующие вопросы:

  1. Как убедиться, что именованный мьютекс boost :: interprocess уничтожен? (так как увидеть общий мьютекс в процессах и как их уничтожить)
  2. Почему получение мьютекса не возвращается через 150 микросекунд? Что-то не так в приведенном ниже коде?

Большое спасибо

AFG

6
задан Abruzzo Forte e Gentile 18 October 2011 в 14:00
поделиться