Windows上的std :: mutex :: lock失败,错误代码3

Vio*_*ffe 11 c++ windows multithreading mutex c++11

我在整个申请中使用std::mutexstd::lock_guard以适当的RAII方式:

struct Foo {
    int f() const
    {
       std::lock_guard<std::mutex> locker(m_mutex);
       return m_i;
    }
private:
   int m_i = 0;
   mutable std::mutex m_mutex;
};
Run Code Online (Sandbox Code Playgroud)

它总是有效,但我刚刚为另一个类增加了并行性,并且在这个新类中locker抛出std::system_error.问题出在这里(xthread标题):

inline int _Mtx_lockX(_Mtx_t *_Mtx)
{   // throw exception on failure
    return (_Check_C_return(_Mtx_lock(_Mtx)));
}
Run Code Online (Sandbox Code Playgroud)

_Mtx_lock 当预期值为0时返回3.不知道3意味着什么.

VS2013,v120_x64运行时.

Wer*_*mus 9

@Phantom(_Thrd_busy)提到的错误意味着已经递归地获取了锁.另见这个答案

  • 就是这样,切换到`std :: recursive_mutex`解决了这个问题!我应该重构我的代码以避免递归锁定. (3认同)