Używam boost::interpocess::scoped_lock
przy użyciu named_mutex
i timeout
; Używam systemu operacyjnego Linux.Przyspiesz międzyprocesor o nazwie mutex zostaje nabyte po awarii
Podczas jednego z moich testów miałem awarię: od tego czasu za każdym razem, gdy próbuję uruchomić ponownie aplikację, utknął w punkcie, w którym utworzyłem zamek; wygląda na to, że muteks pozostał pozyskiwany w jakiś sposób (nie ma żadnego możliwego procesu z jego użyciem).
Co więcej, jeśli spojrzysz na poniższy kod, spodziewam się, że po 150 mikrosekundach czasowy scoped_lock
powróci, aby podać mi błąd., Ale tak nie jest.
#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;
}
....
Moje pytania są następujące:
- Jak upewnić się, że
boost::interprocess
nazwany mutex jest zniszczona? (jak wyświetlić wspólny mutex w procesach i jak je zniszczyć) - Dlaczego nabycie muteksu nie powraca po 150 mikrosekund? Czy jest coś nie tak w poniższym kodzie?
Thanks a lot
AFG
W moim przypadku pozostał on również nabyty w systemie Windows –