IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Plantage anormal sur exception


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Plantage anormal sur exception
    Bonjour,

    j'essaye de faire tourner cette example de boucle mixant une exception et openMP sous linux avec gcc4.4.1 et openMP 3.0. J'ai aléatoirement des plantage de l'appilcation. J'ai cru comprendre que les exceptions ne pouvaient pas franchir les threads de openMP mais pourqoui cela plante-t-il à l'interieur si je les catch en interne aux threads.
    Je sais c'est un peu compliqué, mais si quelqu'un a une suggestion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
       class Exception : public std::exception
       {
          public :
          std::string Message;
          Exception(std::string Mes)    {  Message=Mes;  }
          Exception(const char *Mes)  {  Message=Mes;  }
          virtual const char* what() const throw()
          {
            return(Message.c_str());
          }
          virtual ~Exception() throw() {  }
       };
     
        ... 
        ...
        // Lancer à partir d'un thread de calcul
     
       std::string err;
    #pragma omp parallel 
          for (int i=0;i<1000;i++) {
            try {
                throw Exception("une exception");
            } catch (Exception &e) {
              err=e.Message; 
            }
          }

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    Tu utilises MinGW ? Si c'est le cas jette un coup d'oeil sur ce thread ça pourrait t'intéresser.

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok merci de ta suggestion, mais j'utilisais déjà ce flag "-mthreads" dans ma compilation avec mingW

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Tu es sûr que ça vient d'une exception non attrapée ?

    MAT.

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui, c'est moi qui la provoque dans mon example

  6. #6
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Je n'ai jamais utilisé openMP, mais il semblerai que plusieurs threads vont modifier en même temps la variable err. Ne faudrait-il pas utiliser un mutex?

    EDIT: Tout compte fait je viens de tester et même en retirant la variable err, et même en utilisant une std::exception de base, le problème est le même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      #pragma omp parallel
      for (int i=0;i<1000;i++)
      {
        try
        {
          throw exception();
        }
        catch(exception &e){}
      }
    Je suis un peu surpris car avec boost::thread il m'arrive de gérer des exceptions dans des threads et ca se passe très bien.

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui, je trouve ca trés étrange. Il semblerait que les plantages soient aléatoires. Par example en mode debugger si je place un printf(...) dans le catch je n'ai plus de plantage.

Discussions similaires

  1. Plantage Excel "sur changement"
    Par palmi38 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2007, 17h18
  2. Réponses: 3
    Dernier message: 19/02/2007, 16h14
  3. [oracle 8i] [PL/SQL] Pb sur exception
    Par Titouf dans le forum Oracle
    Réponses: 11
    Dernier message: 21/09/2006, 08h46
  4. [rmi]aide sur exception
    Par david06600 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 31/08/2006, 17h30
  5. activité anormal sur un reseau utilisant linux
    Par ZiMo dans le forum Développement
    Réponses: 3
    Dernier message: 04/02/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo