【发布时间】:2013-05-01 11:12:49
【问题描述】:
由于 concurrent_vector 不使用连续的内存块,我想确定这是否可以:
concurrency::concurrent_vector<Something> my_array;
//Populate 'm_array' somehow perhaps involving multiple threads
const auto iter = std::find_if (my_array.begin (), m_array.end (), SomeLambda);
const int index = iter - my_array.begin ();
我的问题:在任何情况下,'index' 不会索引我刚刚找到的元素(通过 concurrect_vector::operator[] 方法)?我意识到另一个线程理论上可以修改元素 - 这不是我的问题。
我想这应该可行,但是因为我习惯于使用原始指针,所以我想问一下(这样我就不会无意中添加细微错误的来源)。
【问题讨论】:
-
那么
concurent_vector是什么? -
它有一个
difference_type,并且文档说它是一个随机访问迭代器,所以假设MS是理智的并且遵循The Standard meaning of that phrase,这是安全的。 -
感谢@BoBTFish。这是一个有用的参考。
-
Microsoft 的
concurrent_vector源自 tbb 的concurrent_vector。如果您需要将代码移植到 Windows 以外的地方,您几乎可以直接将 tbb 实现直接放入其中:threadingbuildingblocks.org/docs/help/reference/…
标签: c++ multithreading visual-c++ concurrency iterator