Mutex在调试时导致访问冲突 - 否则工作正常

时间:2016-01-15 23:17:09

标签: c++ unit-testing c++11 visual-c++ visual-studio-2015

以下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)我需要担心吗?

哪些有效,哪些无效:

  • 将该应用程序作为命令行应用程序运行:工作(无访问冲突)
  • 从Visual Studio调试应用程序:工作(让我跨越具有唯一锁定的行)
  • 将应用程序作为Windows服务运行并附加调试程序:工作
  • 从Visual Studio中运行单元测试(使用ReSharper):正常工作
  • 从命令行运行单元测试:工作
  • 从Visual Studio调试单元测试(使用ReSharper):崩溃

0 个答案:

没有答案