使用哪种容器和锁定机制

Which container and locking mechanism to use?

本文关键字:锁定 机制      更新时间:2023-10-16

我有 2 个线程,第一个 - 玩家滴答声,第二个 - 渲染。两个线程均未同步。我需要在第一个线程中收集信息并在第二个线程中呈现它。在tick线程中,我使用2个循环收集信息。每次它在tick线程中输入代码时,都应重置所有渲染目标列表。我从 2 个循环中收集这些目标,列表必须是关联的,但由于渲染而非常快。

void TickThread()
{
   g_pLock->Enter(); //EnterCriticalSection
   g_List.clear(); //clear list of targets
   for (obj1 : g_Objects1) //first loop of objects
   {
     if (obj1 && true) // here's selection
        g_List[obj1->uid] = obj1; //create
   }
   for (obj2 : g_Objects2) //another loop of objects
   {
     if (obj2 && true) // here's selection
        g_List[obj2->uid] = obj2; //replace if already exists or create
   }
   g_pLock->Leave(); //code must be fast enough, otherwise it will lock rendering
}
void RenderThread()
{
   g_pLock->Enter(); //EnterCriticalSection
   for (obj : g_List) //iterate over whole list
   {
      //render obj.first obj.second
   }
   g_pLock->Leave();
}

也许我需要一些哈希图,对象的最大数量也是 64我应该使用哪个容器,它应该非常快,还要记住我知道目标的最大数量,所以可以在开始时分配内存吗?还有用什么来锁定?我不确定标准::地图好主意...谢谢

你可以使用std::map,因为它们很快。大小很灵活,您可以在将来使用它进行扩展。此外,如问题中所述,线程应同步。