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

C++ C++;lambda中的互斥导致崩溃,c++,lambda,mutex,C++,Lambda,Mutex,我想从lambda中的互斥锁获取锁,但这会导致崩溃 class ControlWindow { public: explicit ControlWindow(); ~ControlWindow(); private: void createMyWindow(); std::mutex m_mutex; }; void ControlWindow::createMyWindow() { ... Button* btn = new Button([t

我想从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();
    });
    ...
}
引发的错误是:在中的0x00007FFF05FD3FB8处引发异常 MyApp.exe:微软C++异常:STD::SytSytRead在内存中出错 位置0x000000AD753FE070。调试错误

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


如何正确访问互斥体?

我的错误是,我试图从同一线程锁定互斥体两次。进入lambda的过程很好。此外,使用
std::lock_-guard
也是合适的。事实上,这里需要调用代码来发现我的错误

请创建一个。什么是
按钮
?lambda什么时候来?
ControlWindow
的生存期是多少?如果已经从线程中的其他位置锁定了该互斥锁是合法的,那么请查看
std::recursive\u mutex