【发布时间】:2017-08-27 07:17:50
【问题描述】:
我有一个 stl 映射,其中整数作为键,类对象的向量作为其值。
class foo {
// provides wrapper around std::queue for thread safety
private :
std::queue<>
}
std::map<unsigned int, std::vector<foo *> > mymap;
foo 类只是 std::queue 实现的线程安全包装器。 现在进入实际问题 - 此映射用于多线程场景,其中每个线程根据创建期间传递的参数访问相应的向量。
假设我创建了 4 个线程并传递了 0,1,2,3 作为参数:
thread 0 - mymap[0];
thread 1 - mymap[1];
thread 2 - mymap[2];
thread 3 - mymap[3];
- 地图的大小在创建过程中是固定的,不会更改。
我需要让我的地图线程安全吗?
- 因为地图的大小是固定的,所以地图不会重新排序。
- 每个线程仅根据其 id 更改其对应的向量。
【问题讨论】:
-
从多线程读取是安全的。看看这个 - stackoverflow.com/questions/1846186/…
-
我的情况是矢量大小被修改。只有地图的大小保持一致
-
我想知道在这些线程与
main()线程连接后,在向量中插入或删除某些元素是否反映在相应的mymap[]向量中。在任何情况下,这些向量都不会在线程之间共享。所以应该没问题。 -
为什么不改用
std::thread_local。见这里en.cppreference.com/w/cpp/keyword/thread_local。从您的描述看来,这就是您所需要的,以防您不迭代整个map以从各种vectors检索一些数据
标签: c++ multithreading stl