使用哪种容器和锁定机制
Which container and locking mechanism to use?
我有 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,因为它们很快。大小很灵活,您可以在将来使用它进行扩展。此外,如问题中所述,线程应同步。
相关文章:
- 如何找到锁定Linux futex的C++行
- G锁定铸造到基础上会释放模拟行为
- 如何检查线程是否锁定
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 我应该在锁定TBitmap画布后解锁它吗
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 如何在实时应用程序中锁定线程
- 在 lambda 中锁定 std::shared_ptr 的复制操作
- 为什么 boost::comb 对结构化绑定的支持缺少结构化绑定机制对 boost::tuples::cons 的适应?
- 使用简单两相锁定的并发程序
- 锁定来自其他线程的类成员
- 了解使用堆栈实现队列的递归调用机制
- 假想的锁定机制:非阻滞写,阅读和无效
- 使用哪种容器和锁定机制
- 带条件变量的升压锁定机制
- 是否可以在C++中使用std::atomic_flag获得线程锁定机制
- 正在为编写者和读者寻找最佳的增强文件锁定机制
- 多线程和多进程应用程序的锁定机制之间有什么区别