我正在寻找一种方法来保证,只要线程锁定了特定资源,它就会在特定时间段(如果尚未释放)之后被迫释放该资源。在需要限制任何特定线程可以拥有该连接的时间量的情况下,设想一个连接。
我设想这是可以使用的方式:
{
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套接字-建立套接字连接后,每一侧的代码都需要处理另一侧断开连接的情况。
我正在寻找一种模式来处理通常会自行超时的资源类型,但是如果资源不超时,则需要将其重置。这不必处理每种类型的资源。
最佳答案
这是行不通的,它将永远行不通。换句话说,这永远不可能做到。它违背了所有权和原子交易的所有概念。因为当线程获取锁并连续实现两个事务时,它希望它们对于外部单词是原子可见的。在这种情况下,很有可能会破坏交易-将执行交易的第一部分,而不会执行第二部分。
更糟糕的是,由于将强制删除该锁,因此在中断的线程有任何回滚机会之前,外部单词可以看到部分执行的事务。
这个想法与所有多线程思维流派背道而驰。
关于c++ - 是否有C++设计模式实现了控制线程可以拥有锁定资源的时间量的机制或互斥锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54598455/