我的程序基于在 main( )。main() 处理“世界”本身的更新,而函数 updateDisplay() 在监视器上显示“世界”的内容。updateDisplay() 由单独的 C++11 线程(在 main() 中启动)运行,并通过传递的引用访问“世界”。
我的问题是我遇到了罕见的崩溃,因为在下面 updateDisplay() 的(简化)代码摘录中,向量 world.m_grid[i][j].m_rabbit 偶尔会在“ if (!world.m_grid[i][j].m_rabbit.empty())" 签入 updateDisplay(),但在后续访问 m_rabbit[0] 向量成员之前,导致“向量下标超出范围”错误。
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
if (!world.m_grid[i][j].m_rabbit.empty())
{
s_rabbit_64.setScale(absTileScale * world.m_grid[i][j].m_rabbit[0].m_size, absTileScale * world.m_grid[i][j].m_rabbit[0].m_size);
s_rabbit_64.setPosition(x * k + (12 * absTileScale), y * (i - winFocus.y) + (12 * absTileScale));
window.draw(s_rabbit_64);
}
}
}
我的问题是,如何锁定 world.m_grid[i][j].m_rabbit 向量,以便 main() 在 updateDisplay() 线程访问它时无法更改它?我认为这是通过使用 std::mutex 实现的,但我一直无法找到一个指南,让我对此有足够的理解,以便将其应用到我的程序中。我希望这足够清楚理解(程序比这个摘录大得多,我不想做大量的文本转储),请要求澄清你需要的任何点。
感谢您的关注。
[编辑] 拼写