Я хотел бы последовательно перебирать все элементы в std:: list с помощью OpenMP. Цикл должен иметь возможность изменять элементы списка. Есть ли простое решение для этого? Похоже, что OpenMP 3.0 поддерживает параллель для циклов, когда итератор является Итератором произвольного доступа, но не иначе. В любом случае, я бы предпочел использовать OpenMP 2.0, поскольку у меня нет полного контроля над тем, какие компиляторы доступны мне.
Если мой контейнер был вектором, я мог бы использовать:
#pragma omp parallel for
for (auto it = v.begin(); it != v.end(); ++it) {
it->process();
}
Я понимаю, что я мог бы скопировать список в вектор, сделать цикл, а затем скопировать все обратно. Однако я хотел бы избежать этой сложности и накладных расходов, если это возможно.