Как мне стать владельцем заброшенного boost :: interprocess :: interprocess_mutex?

Мой сценарий: один сервер и несколько клиентов (правда, не много). Сервер может отвечать только одному клиенту за раз, поэтому они должны быть поставлены в очередь. Я использую мьютекс (boost::interprocess::interprocess_mutex) сделать это, завернутый вboost::interprocess::scoped_lock.

Дело в том, что если один клиент неожиданно умирает (то есть деструктор не запускается) во время удержания мьютекса, другие клиенты испытывают проблемы, потому что они ожидают этого мьютекса. Я рассмотрел использование таймерного ожидания, поэтому, если мой клиент ждет, скажем, 20 секунд и не получает мьютекс, он все равно идет вперед и общается с сервером.

Проблемы с этим подходом: 1) он делает это каждый раз. Если он находится в цикле и постоянно общается с сервером, ему нужно каждый раз ждать тайм-аут. 2) Если есть три клиента, и один из них умирает, удерживая мьютекс, два других просто подождут 20 секунд и одновременно будут общаться с сервером - именно то, чего я пытался избежать.

Так,how can I say to a client, "hey there, it seems this mutex has been abandoned, take ownership of it"?

Ответы на вопрос(1)

Ваш ответ на вопрос