C++ C++;lambda中的互斥导致崩溃
我想从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
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
。