У меня есть большое количество наборов целых чисел, которые я, в свою очередь, вставил в вектор указателей. Мне нужно иметь возможность обновлять эти наборы целых чисел параллельно, не вызывая условия гонки. Более конкретно. Я использую конструкцию OpenMP "Параллельно для".
Для работы с общими ресурсами 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);
}
Обратите внимание, что я использую случайное целое число для индекса, потому что в моем приложении любой поток может обращаться к любому индексу (в моем более крупном приложении есть случайный элемент, но мне не нужно вдаваться в подробности).
Я видел подобный пример этого для увеличения целого числа , но я не уверен, работает ли он при работе с указателем на контейнер, как в моем случае.