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

Multithreading Discussion :

thread-safe et les process


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut thread-safe et les process
    Salut,

    Comme j'ai mentionné dans une autre discussion, j'utilises l'algorithme génétique dans mon application dont la durée d'exécution peut durer plus qu'une journée parfois. J'ai essayé d'exécuter des instances de cet algorithmes dans des threads différents mais ceci n'a pas fonctionné puisque la librairie que j'utilise "GALib" n'est pas thread safe.
    Est ce que la solution à ceci sera d'utiliser les process puisque la mémoire est non partagée ? ou y aurai un moyen d'utiliser des classes qui ne sont pas thread safe dans des threads ?

    Merci

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Ca depend comment fonctionne GALib.
    Si cette lib est reentrant, tu ne devrais pas avoir de problème tant que chaque thread à sa propre instance.
    Sinon, l'utilisation de plusieur peut être une solution.
    Tu peut utiliser dbus pour l'interaction entre tes process (y as un version windows qui semble marcher trés bien maintenant) et avoir des Signal/slots.
    Y as aussi quelques classes dans Qt :
    • QSharedMemory
    • QSystemSemaphore
    • peut être autre

  3. #3
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Normalement si chaque Thread sont independant il ne devrait pas y a voir de problème de mise en place. peux tu nous montrer comment tu as testé tout ça. S'il n'y a aucune ressource partagé je pense que ton problème est ailleur.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    D'après ce que j'avais compris, c'est que si une classe n'est pas thread-safe, même si chaque thread possède sa propre instance ca risque de ne pas fonctionner puisque la classe pourrait possèder des variables globales ou statiques qui seront accèdées simultanément par différents thread.

    Est ce que je me trompe ?

  5. #5
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Citation Envoyé par Nehmé Voir le message
    D'après ce que j'avais compris, c'est que si une classe n'est pas thread-safe, même si chaque thread possède sa propre instance ca risque de ne pas fonctionner puisque la classe pourrait possèder des variables globales ou statiques qui seront accèdées simultanément par différents thread.

    Est ce que je me trompe ?
    Oui tu as raison. Mais c'est curieux quand meme que cette lib ne soit pas du tout thread safe ou reentrante. Apres avec des moyen de synchro comme te le dis Yan tu ne devrais plus avoir de problème.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    Citation Envoyé par yan Voir le message
    Salut.
    Ca depend comment fonctionne GALib.
    Si cette lib est reentrant, tu ne devrais pas avoir de problème tant que chaque thread à sa propre instance.
    Sinon, l'utilisation de plusieur peut être une solution.
    Tu peut utiliser dbus pour l'interaction entre tes process (y as un version windows qui semble marcher trés bien maintenant) et avoir des Signal/slots.
    Y as aussi quelques classes dans Qt :
    • QSharedMemory
    • QSystemSemaphore
    • peut être autre
    Merci !
    L'interaction entre les process m'inquiétais mais d'après ta réponse ca l'air qu'il existe des moyens efficace. Je vais faire un peu de lecture dès que j'aurai un peu de temps.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Y as deux choses importante avec les thread :
    * reentrant (quasi la totalité des classes Qt autre que GUI) : ne pose aucun problème de concurrence si chaque thread possède sa prope instance de la classes. Sinon faut des protections.
    * thread safe (connect et autre ) : tu n'as pas de restriction et l'utilise comme tu veut

    Une classe qui n'est pas rentrante, ca dépend de ce quel fait... En gros tu doit (si possible) protéger tous les appels à cette classes

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    Je vois !
    Dans mon cas le code ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      GASteadyStateGA ga;
    // Mutex.lock();
      ga.evolve();
    // Mutex.unlock();
    Si je protège avec les mutex, tous fonctionnent super bien, mais aucune utilitée des threads dans ce cas puisque tout l'algorithme se déroule dans la fonction evolve(). Le pseudo code que j'ai montré est dans la fonction run du thread.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 09/01/2007, 13h00
  2. [XSD] gerer les processing-instruction ?
    Par linuxludo dans le forum Valider
    Réponses: 4
    Dernier message: 24/11/2005, 17h56
  3. [VB.NET]Aide sur les process
    Par Dnx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2005, 15h13
  4. [MFC] CMAP non thread safe ?
    Par fmarot dans le forum MFC
    Réponses: 5
    Dernier message: 04/10/2005, 13h21
  5. Lister les process avec leurs arguments
    Par jamfr73 dans le forum MFC
    Réponses: 5
    Dernier message: 23/12/2004, 10h54

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