Jak mogę przejąć opuszczony boost :: interprocess :: interprocess_mutex?

Mój scenariusz: jeden serwer i niektórzy klienci (choć niewielu). Serwer może odpowiadać tylko na jednego klienta naraz, więc muszą być w kolejce. Używam muteksu (boost::interprocess::interprocess_mutex) aby to zrobić, zapakowane wboost::interprocess::scoped_lock.

Chodzi o to, że jeśli jeden klient nieoczekiwanie zginie (tzn. Nie uruchomi się żaden destruktor), trzymając mutex, inni klienci mają problemy, ponieważ czekają na ten mutex. Rozważyłem użycie czasowego oczekiwania, więc jeśli klient czeka, powiedzmy, 20 sekund i nie otrzyma muteksu, i tak idzie dalej i rozmawia z serwerem.

Problemy z tym podejściem: 1) robi to za każdym razem. Jeśli jest w pętli, rozmawiając stale z serwerem, musi za każdym razem czekać na limit czasu. 2) Jeśli jest trzech klientów, a jeden z nich umiera trzymając mutex, pozostałe dwa będą po prostu czekać 20 sekund i rozmawiać z serwerem w tym samym czasie - dokładnie to, czego próbowałem uniknąć.

Więc,jak mogę powiedzieć klientowi: „hej, wydaje się, że ten mutex został porzucony, przejąć na własność”?

questionAnswers(1)

yourAnswerToTheQuestion