【发布时间】:2016-11-11 00:17:41
【问题描述】:
我有一个名为my_objects 的集合(目前是std::list<MyClass*>,但也可以是std::map<int, MyClass*>),其中包含指向MyClass 实例的指针。
目前,我这样处理数组:
for(std::list<MyClass*>::iterator iterator = my_objects.begin(), end = my_objects.end(); iterator != end; ++iterator) {
(*iterator)->someFunction();
// ...
}
someFunction 可能会改变当前元素的一些属性,并可能读取其他元素的一些属性。但是没有属性被另一个实例更改并读取。所以无论迭代顺序如何,结果都是一样的。
我想重写这个循环,使用四个std::thread,并用第一个线程处理第一季度的元素,用线程处理第二季度的元素,等等......
是否可以跳转到集合内部并在那里开始迭代?这是处理这样一个集合的推荐方法吗?如果没有,应该怎么做?
【问题讨论】:
-
你的问题不是线程问题,而是随机访问
std::list。std::list不支持随机访问,请使用std::vector。
标签: c++ multithreading c++11 collections std