使用 OpenMP 多线程的 Stl 容器向量 Push_back
我想将一个对象从不同的线程推回到向量中。没有。线程数取决于机器。
#pragma omp parallel shared(Spaces, LookUpTable) private(LutDistribution, tid)
{
tid = omp_get_thread_num();
BestCoreSpaces.push_back( computeBestCoreSpace(tid, &Spaces, &LookUpTable, LutDistribution));
}
问题是,我不确定它是否有效。我没有遇到崩溃。我正在使用 openMP。 openMP 正在排队吗? 也许使用 BestCoreSpaces.reserve(tid) 为容器预留内存或使用 BestCoreSpaces.assign(tid, Space) 分配元素数量就足够了。有人可以帮助我吗?
I want to push_back an object into a vector from different threads. The no. of threads depends on the machine.
#pragma omp parallel shared(Spaces, LookUpTable) private(LutDistribution, tid)
{
tid = omp_get_thread_num();
BestCoreSpaces.push_back( computeBestCoreSpace(tid, &Spaces, &LookUpTable, LutDistribution));
}
The problem is, that I'm not sure if it's working. I don't get crashes. I'm using openMP. Is openMP queuing something?
Maybe its enough to reserve memory for the container with BestCoreSpaces.reserve(tid) or to assign the amount of elements with BestCoreSpaces.assign(tid, Space). Can somebody help me?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你只是侥幸逃脱——你有一个竞争条件,它可能会或可能不会显现出来,具体取决于编译时的优化级别、线程执行和/或星号的对齐。
您必须将
push_back()
设为关键部分(即使用互斥体)。例如:You just get away with it - you have a race condition that might or might not manifest itself depending on the optimization level at compile time, the thread execution and/or the alignment of the stars.
You have to make the
push_back()
a critical section (i.e use a mutex). For example: