¿Cómo puedo paralelizar un bucle for a través de una lista std :: C ++ usando OpenMP?

Me gustaría recorrer todos los elementos de una lista std :: en paralelo usando OpenMP. El ciclo debería poder alterar los elementos de la lista. ¿Hay una solución simple para esto? Parece que OpenMP 3.0 admite bucles paralelos cuando el iterador es un iterador de acceso aleatorio, pero no de otra manera. En cualquier caso, preferiría usar OpenMP 2.0 ya que no tengo control total sobre qué compiladores están disponibles para mí.

Si mi contenedor fuera un vector, podría usar:

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

Entiendo que podría copiar la lista en un vector, hacer el ciclo y luego copiar todo de nuevo. Sin embargo, me gustaría evitar esta complejidad y sobrecarga si es posible.

Respuestas a la pregunta(10)

Su respuesta a la pregunta