Wie übernehme ich das Eigentum an einem verlassenen boost :: interprocess :: interprocess_mutex?

Mein Szenario: ein Server und einige Clients (wenn auch nicht viele). Der Server kann jeweils nur auf einen Client antworten, sodass er in die Warteschlange gestellt werden muss. Ich benutze einen Mutex (boost::interprocess::interprocess_mutex), um dies zu tun, eingewickelt inboost::interprocess::scoped_lock.

Die Sache ist, wenn ein Client unerwartet stirbt (d. H. Kein Destruktor läuft), während er den Mutex hält, sind die anderen Clients in Schwierigkeiten, weil sie auf diesen Mutex warten. Ich habe überlegt, zeitgesteuertes Warten zu verwenden. Wenn mein Client beispielsweise 20 Sekunden wartet und den Mutex nicht erhält, geht er weiter und kommuniziert trotzdem mit dem Server.

Probleme mit diesem Ansatz: 1) es tut dies jedes Mal. Wenn es sich in einer Schleife befindet und ständig mit dem Server kommuniziert, muss es jedes Mal auf das Timeout warten. 2) Wenn es drei Clients gibt und einer von ihnen stirbt, während der Mutex gehalten wird, warten die anderen beiden nur 20 Sekunden und sprechen gleichzeitig mit dem Server - genau das, was ich vermeiden wollte.

So,Wie kann ich zu einem Kunden sagen: "Hey, es scheint, als wäre dieser Mutex aufgegeben worden. Übernehmen Sie das Eigentum daran."

Antworten auf die Frage(1)

Ihre Antwort auf die Frage