¿Está bien usar "lanzar excepción" dentro de la región paralela?

¿Estará bien usar "Lanzar excepción" dentro de la región paralela?

¿Qué pasará con el resto de los subprocesos cuando un subproceso lanza una excepción?

código:

#pragma omp parallel for
for(int i = 0; i < n; i++)
{
     if(arr[i] < 0)
       throw BadParameter("bad array value");
}

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

Un lanzamiento ejecutado dentro de una región paralela debe hacer que la ejecución se reanude dentro de la misma región paralela y debe ser capturado por el mismo subproceso que lanzó la excepción.

De lo contrario, se propagará a una excepción no controlada.

contestado el 03 de mayo de 12 a las 21:05

Esto es correcto, pero molesto. ¿Se superará esto alguna vez (en la próxima versión de openmp)? Utilizo una clase auxiliar para lanzar excepciones y no se lanzará (pero saldrá con un error fatal), si está dentro de una región paralela y un objeto de tipo ThrowGuard existe. - Walter

@Walter, ¿cuál esperaría que fuera el comportamiento correcto del futuro OpenMP en ese caso? - cristo iliev

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.