c++ - 实现 unique_unlock,与 std::unique_lock 相反

标签 c++ synchronization mutex

我遇到的情况是,大多数时候都需要锁定 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/

相关文章:

c++ - -> 在 C++ 中是什么意思?

c# - unsigned long 和 unsigned int 之间有什么区别?这两种类型在 C# 中应如何编码(marshal)?

c++ - 我该如何剥离符号表?

c - 在C中不使用semapore的数据同步

c++ - QMutex 访问共享变量

c++ - 检查进程是否正在运行 - Windows

algorithm - 需要用属性时间同步两个列表,但时间不相等

c++ - 将谓词传递给 QWaitCondition?

multithreading - 使用锁保护和互斥锁的首选方法是什么

JSF并发问题