Я ищу способ гарантировать, что каждый раз, когда поток блокирует определенный ресурс, он вынужден освобождать этот ресурс через определенный период времени (если он еще не освободил его). Представьте себе соединение, в котором вам нужно ограничить время, в течение которого конкретный поток может владеть этим соединением.
Я представляю, как это можно использовать:
{
std::lock_guard<std::TimeLimitedMutex> lock(this->myTimeLimitedMutex, timeout);
try {
// perform some operation with the resource that myTimeLimitedMutex guards.
}
catch (MutexTimeoutException ex) {
// perform cleanup
}
}
Я вижу, что есть timed_mutex, который позволяет программе тайм-аут, если блокировка не может быть получена. Мне нужно, чтобы тайм-аут произошел после того, как блокировка получена.
Уже есть некоторые ситуации, когда вы получаете ресурс, который можно неожиданно забрать. Например, сокеты tcp - как только соединение сокета установлено, код на каждой стороне должен обработать случай, когда другая сторона разрывает соединение.
Я ищу шаблон, который обрабатывает типы ресурсов, которые обычно имеют тайм-аут самостоятельно, но когда они этого не делают, они должны быть сброшены. Это не должно обрабатывать каждый тип ресурса.