C++ 使用std::map<;Obj*,int>;在TThread的对象中,会导致访问冲突
我正在尝试使用TThreads并行化一个仿真模型。每个模型对象都包括一个C++ 使用std::map<;Obj*,int>;在TThread的对象中,会导致访问冲突,c++,multithreading,stdmap,tthread,C++,Multithreading,Stdmap,Tthread,我正在尝试使用TThreads并行化一个仿真模型。每个模型对象都包括一个std::map。只要只有一个线程在运行,模型就可以正常运行。如果第二个线程启动,我将在第一个线程的模型映射中获得访问冲突 为了测试映射是否真的是问题所在,我将其替换为std::vector。这很好,但速度要慢得多,因为每次我试图找到一个特定的obj*时,我都必须遍历整个向量 我知道不可能为映射保留内存,因此我不知道如何在没有访问冲突的情况下使用映射。是否在线程之间共享映射?您是否有防止同时访问映射的保护措施(例如互斥或某种
std::map
。只要只有一个线程在运行,模型就可以正常运行。如果第二个线程启动,我将在第一个线程的模型映射中获得访问冲突
为了测试映射是否真的是问题所在,我将其替换为std::vector
。这很好,但速度要慢得多,因为每次我试图找到一个特定的obj*
时,我都必须遍历整个向量
我知道不可能为映射保留内存,因此我不知道如何在没有访问冲突的情况下使用映射。是否在线程之间共享映射?您是否有防止同时访问映射的保护措施(例如互斥或某种锁)?否映射不共享。每个线程都有自己的映射。这些非共享映射指向的对象是否在线程之间共享?否,线程之间不共享内存。所有线程都有一个完全独立运行的模型。地图中的对象也是模型的一部分。然后你必须尝试创建一个模型来向我们展示。否则这个问题是不可能回答的,我们所能给你的只是狡猾的猜测(大部分是错误的)。如果你还没有完成,那么请(如果你已经读过,那么请再读一遍)。你在线程之间共享地图吗?您是否有防止同时访问映射的保护措施(例如互斥或某种锁)?否映射不共享。每个线程都有自己的映射。这些非共享映射指向的对象是否在线程之间共享?否,线程之间不共享内存。所有线程都有一个完全独立运行的模型。地图中的对象也是模型的一部分。然后你必须尝试创建一个模型来向我们展示。否则这个问题是不可能回答的,我们所能给你的只是狡猾的猜测(大部分是错误的)。如果你还没有读过,请再读一遍。