相关疑难解决方法(0)

STL 中不必要的锁定?(Visual C++ Express)

我正在尝试构建一个可以扩展到多个核心的俄罗斯方块人工智能算法。

在我的测试中,结果表明使用多个线程比使用单个线程慢。

经过一些研究,我发现我的线程大部分时间都在等待_Lockit _Lock(_LOCK_DEBUG)。这是一个屏幕截图

正如您所看到的,锁应用于局部变量,无论如何它都不需要任何锁定!

我的问题是:

  • 为什么STL要锁定这个向量?
  • 我怎样才能让我的程序更快?(使用数组?)

更新

我通过在 Visual Studio 项目中设置这些命令行选项来消除锁定:

/D "_HAS_ITERATOR_DEBUGGING=0" /D "_SECURE_SCL=0"
Run Code Online (Sandbox Code Playgroud)

将其应用于解决方案文件中的所有项目非常重要,否则在运行时会发生错误(迭代器冲突等)。

我改变的第二件事是改变std::vector<bool>std::vector<char>。我不知道std::vector<bool>这么慢。

c++ multithreading stl visual-studio

6
推荐指数
1
解决办法
2624
查看次数

标签 统计

c++ ×1

multithreading ×1

stl ×1

visual-studio ×1