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

Windows Discussion :

Comment éviter l'interblocage lors du multithreading


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut Comment éviter l'interblocage lors du multithreading
    Bonjour,

    J'ai un programme à developper relativement complexe et j'ai comme contrainte majeur le temps d'exécution du programme alors j'opte pour le multithreading mais une chose qui me fait vraiment peur "l'interblocage" étant donné qu'il m'est difficile de savoir ce chaque processus a exactement besoin a tout moment je vois pas comment éviter l'interblocage entre mes threads.
    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Je n'ai pas bien compris la question. Tu veux parler synchronisation entre threads ? Genre deux threads ne doivent pas utiliser une même variable globale en même temps ? Ou tu veux plutôt parler de parallélisation ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Beginer Voir le message
    Bonjour,

    J'ai un programme à developper relativement complexe et j'ai comme contrainte majeur le temps d'exécution du programme alors j'opte pour le multithreading mais une chose qui me fait vraiment peur "l'interblocage" étant donné qu'il m'est difficile de savoir ce chaque processus a exactement besoin a tout moment je vois pas comment éviter l'interblocage entre mes threads.
    Merci pour votre aide.
    Si vous ne savez pas encore définir ce dont chaque "thread" aura besoin, il est encore trop tôt pour mettre des verrous sur les ressources correspondantes et... constater des "inter blocages".

    Note: Les seules ressources sur lesquelles il pourrait y avoir sérialisation des accès sont à ce stade celles gérée par le système: fichiers, ...

    Dit autrement, tant que vous n'aurez pas identifié les ressources "à partager", et les modalités de ce partage multiplier les threads est prématuré: les résultats seront aléatoirement faux.
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Melem Voir le message
    Je n'ai pas bien compris la question. Tu veux parler synchronisation entre threads ? Genre deux threads ne doivent pas utiliser une même variable globale en même temps ? Ou tu veux plutôt parler de parallélisation ?
    Je veux dire la synchronisatin entre plusieurs threads qui je vais faire tourer sur 2 coeurs.

    Citation Envoyé par wiztricks Voir le message
    Si vous ne savez pas encore définir ce dont chaque "thread" aura besoin, il est encore trop tôt pour mettre des verrous sur les ressources correspondantes et... constater des "inter blocages".

    Note: Les seules ressources sur lesquelles il pourrait y avoir sérialisation des accès sont à ce stade celles gérée par le système: fichiers, ...

    Dit autrement, tant que vous n'aurez pas identifié les ressources "à partager", et les modalités de ce partage multiplier les threads est prématuré: les résultats seront aléatoirement faux.
    -W
    Le problème réside dans le fait que mes thread ne sont pas prédicable en terme de besoin en ressource je développe un programme relativement complexe du fait que je suis en interaction avec des ressources externes et des produits a programmer

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Je veux dire la synchronisatin entre plusieurs threads qui je vais faire tourer sur 2 coeurs.
    [MSDN] Synchronisation Objects

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Beginer Voir le message
    je vois pas comment éviter l'interblocage entre mes threads.
    Nous non plus, hélas, sans savoir ce que font tes threads... Ce qui est différent de connaître leur exécution précise (déterminisme) comme tu semble le croire : dans un programme déterministe à 100%, il n'y a justement pas besoin d'objets de synchronisation d'ailleurs.
    Il faut savoir ce que font GLOBALEMENT tes threads pour amorcer un début de réponse : Lecture / écriture de fichier ? Calcul ? Transfert de données ? Affichage ? Saisie utilisateur ?

    Il n'y a pas UNE réponse unique et universelle à ta question : cela dépend de l'application, des algorithmes utilisées, des données manipulées, et de pas mal d'autres paramètres.

    Certes, on peut te donner un truc générique qui sera certes exact et complet, mais si tu n'as pas familier avec la programmation parallèle, ça ne te servira à rien... Car cela se résume dans la phrase suivante : "Tout élément non adapté à un traitement simultané ne doit être accédé qu'au travers d'une section critique". Super, t'es vachement avancé avec ça...

    Si tu commences à peine la programmation parallèle, comme cela semble être le cas, ne te fais aucune illusion : soit tu auras des interblocages (deadlocks), soit tu auras des performances effondrées à cause de mutex trop nombreux et/ou inutiles. Ce n'est pas un drame, c'est à toi de tester suffisamment ton programme pour être certain que ça ne se produise pas. Point positif, en général, les deadlocks ou les mauvaises perfs se voient très très très vite...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut Merci
    Citation Envoyé par Mac LAK Voir le message
    Nous non plus, hélas, sans savoir ce que font tes threads... Ce qui est différent de connaître leur exécution précise (déterminisme) comme tu semble le croire : dans un programme déterministe à 100%, il n'y a justement pas besoin d'objets de synchronisation d'ailleurs.
    Il faut savoir ce que font GLOBALEMENT tes threads pour amorcer un début de réponse : Lecture / écriture de fichier ? Calcul ? Transfert de données ? Affichage ? Saisie utilisateur ?

    Il n'y a pas UNE réponse unique et universelle à ta question : cela dépend de l'application, des algorithmes utilisées, des données manipulées, et de pas mal d'autres paramètres.

    Certes, on peut te donner un truc générique qui sera certes exact et complet, mais si tu n'as pas familier avec la programmation parallèle, ça ne te servira à rien... Car cela se résume dans la phrase suivante : "Tout élément non adapté à un traitement simultané ne doit être accédé qu'au travers d'une section critique". Super, t'es vachement avancé avec ça...

    Si tu commences à peine la programmation parallèle, comme cela semble être le cas, ne te fais aucune illusion : soit tu auras des interblocages (deadlocks), soit tu auras des performances effondrées à cause de mutex trop nombreux et/ou inutiles. Ce n'est pas un drame, c'est à toi de tester suffisamment ton programme pour être certain que ça ne se produise pas. Point positif, en général, les deadlocks ou les mauvaises perfs se voient très très très vite...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/07/2011, 15h17
  2. Comment éviter les messages d'erreur lors de requêtes SQL
    Par Pentos60 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/01/2011, 09h38
  3. [CANVAS] Comment éviter un antialiasing lors de l'exécution ?
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 29/09/2008, 15h42

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