使用哪种容器和锁定机制?

时间:2017-10-05 09:33:26

标签: c++ multithreading hashmap

我有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();
}

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

1 个答案:

答案 0 :(得分:1)

你可以使用std :: map,因为它们很快。尺寸灵活,您可以在将来使用它。同样如问题中所述,线程应该同步。