以下Bar()
函数从未给我带来任何麻烦:
class Foo {
public:
void Bar();
private:
std::mutex mutex_;
};
void Foo::Bar() {
std::unique_lock<std::mutex> lock{ mutex_ };
// ...
}
现在,我有一个单元测试来覆盖Bar()
- 使用GTest。测试通过很好,但是当我尝试调试它时,我在行中获得了Exception thrown: read access violation
的唯一锁。
中断的代码位于mutex.c
:
if (mtx->thread_id != static_cast<long>(GetCurrentThreadId()))
mtx->_get_cs()->lock();
此处_get_cs()
会返回未初始化的内容。
问题:
1)你能帮助我理解这一点还是指出我正确的方向?
2)我需要担心吗?
哪些有效,哪些无效: