lambda 中的 C++ 互斥导致崩溃

C++ mutex in lambda results in crash

我想从 lambda 中的互斥锁获取锁,但这会导致崩溃。

class ControlWindow
{
public:
    explicit ControlWindow();
    ~ControlWindow();
private:
    void createMyWindow();
    std::mutex m_mutex;
};

void ControlWindow::createMyWindow()
{
    ...
    Button* btn = new Button([this](void*) {
            m_mutex.lock(); // this fails with the error below
            {...}
            m_mutex.unlock();
    });
    ...
}

The error thrown is: Exception thrown at 0x00007FFF05FD3FB8 in MyApp.exe: Microsoft C++ exception: std::system_error at memory location 0x000000AD753FE070. Debug Error!

如果 mutex 是 cpp 文件中的全局变量,它也不起作用。可以很好地访问其他成员变量,并且在调试器中,互斥量在 lambda 中和在 lambda 之外看起来是一样的。

如何正确访问互斥量?

我的错误是我试图从同一个线程锁定互斥体两次。传递到 lambda 工作正常。使用 std::lock_guard<> 也是合适的。实际上,需要调用代码来发现我的错误。