我有大量的整数集,我又将它们放入指针向量中。我需要能够在不引起竞争条件的情况下并行更新这些整数集。进一步来说。我正在使用 OpenMP 的“parallel for”构造。
为了处理共享资源,OpenMP 提供了一个方便的“原子指令”,它允许人们在不使用锁的情况下避免对特定内存块的竞争条件。如果我可以使用“原子指令”来防止同时更新我的整数集会很方便,但是,我不确定这是否可能。
基本上,我想知道以下代码是否会导致竞争条件
vector< set<int>* > membershipDirectory(numSets, new set<int>);
#pragma omp for schedule(guided,expandChunksize)
for(int i=0; i<100; i++)
{
set<int>* sp = membershipDirectory[rand()];
#pragma omp atomic
sp->insert(45);
}
请注意,我使用随机整数作为索引,因为在我的应用程序中,任何线程都可能访问任何索引(在我较大的应用程序中有一个随机元素,但我不需要详细说明)。
我已经看到了一个用于递增 integer 的类似示例,但我不确定它在使用指向容器的指针时是否有效,就像我的情况一样。