std::mutex::lock 在 Windows 上失败,错误代码 3
std::mutex::lock fails on Windows, error code 3
我在整个应用程序中以适当的 RAII 方式使用 std::mutex
和 std::lock_guard
:
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;
};
它一直有效,但我刚刚又添加了一个 class 并行性,并且在这个新 class locker
throws std::system_error
中。问题出在这里(xthread
header):
inline int _Mtx_lockX(_Mtx_t *_Mtx)
{ // throw exception on failure
return (_Check_C_return(_Mtx_lock(_Mtx)));
}
_Mtx_lock
returns 3 而预期值为 0。不知道 3 是什么意思。
VS2013,v120_x64 运行时。
@Phantom (_Thrd_busy) 提到的错误意味着锁已被递归获取。另请参阅此 answer
我在整个应用程序中以适当的 RAII 方式使用 std::mutex
和 std::lock_guard
:
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;
};
它一直有效,但我刚刚又添加了一个 class 并行性,并且在这个新 class locker
throws std::system_error
中。问题出在这里(xthread
header):
inline int _Mtx_lockX(_Mtx_t *_Mtx)
{ // throw exception on failure
return (_Check_C_return(_Mtx_lock(_Mtx)));
}
_Mtx_lock
returns 3 而预期值为 0。不知道 3 是什么意思。
VS2013,v120_x64 运行时。
@Phantom (_Thrd_busy) 提到的错误意味着锁已被递归获取。另请参阅此 answer