我遇到的情况是,大多数时候都需要锁定 std::mutex,除非在特定范围内。我认为应该有一个与 std::unique_lock
相反的东西,即构造时解锁()和销毁时锁定()。
应该像这样简单
template<typename M>
class unique_unlock
{
public:
unique_unlock(M& m) : m_(m) {
m_.unlock();
}
~unique_unlock() {
m_.lock();
}
private:
M& m_;
};
这种方法有什么问题吗?
最佳答案
std::mutex::lock
被记录为抛出 std::system_error
,这将导致您的析构函数抛出。您需要显式 noexcept(false)
来覆盖隐式 noexcept(true)
。
这太不寻常了,您可能还应该警告您类(class)的用户。这似乎是一个 RAII 范围保护类,但如果此 dtor 在堆栈展开期间运行(正如 RAII 的意图),那么第二个异常将 std::terminate
程序。
关于c++ - 实现 unique_unlock,与 std::unique_lock 相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68859945/