Как распараллелить цикл for через C ++ std :: list с использованием OpenMP?

Я хотел бы перебирать все элементы в std :: list параллельно, используя OpenMP. Цикл должен быть в состоянии изменить элементы списка. Есть ли простое решение для этого? Кажется, что OpenMP 3.0 поддерживает параллельные циклы for, когда итератор является итератором произвольного доступа, но не иначе. В любом случае, я бы предпочел использовать OpenMP 2.0, поскольку у меня нет полного контроля над тем, какие компиляторы мне доступны.

Если бы мой контейнер был вектором, я мог бы использовать:

#pragma omp parallel for
for (auto it = v.begin(); it != v.end(); ++it) {
    it->process();
}

Я понимаю, что я мог бы скопировать список в вектор, сделать цикл, а затем скопировать все обратно. Тем не менее, я хотел бы избежать этой сложности и накладных расходов, если это возможно.

Ответы на вопрос(5)

Ваш ответ на вопрос