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

Embarqué Discussion :

Multi thread accès variable


Sujet :

Embarqué

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Points : 82
    Points
    82
    Par défaut Multi thread accès variable
    Bonjour,

    J'ai un doute et j'aimerais avoir confirmation.

    Sur une architecture micro 32 bits j'ai 2 threads :
    - la première th1 fait une recopie d'un ont dans un autre ex : a=b.
    - la seconde th2 affecte une nouvelle valeur a b

    Compte tenu de l'architecture, peut il y avoir corruption de donnée pendant la recopie de b dans a (th1) si th2 modifie b.
    Ex : th2 interrompt th1 au niveau de la recopie du 2em octets de b dans a
    Ou est ce atomique ?

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut untipy,
    Je ne sais pas répondre a ta question, je n'ai jamais utilisé de thread sur mes micros par contre je vais bientôt me pencher sur la question.
    En revanche, sur d'autres forums des personnes pourraient te répondre plus facilement peut être en reformulant la question.


    Si je comprends bien :

    - Tu as 2 threads (peu importe l'architecture car ça fonctionne de la même façon)
    - Deux variables globales A et B
    - Le premier thread fait A = B
    - Le second thread modifie B

    Est ce qu'il peut y avoir des corruptions du genre :
    le premier thread s'interrompt alors qu'il était entrain de faire A = B.
    le second thread se lance et modifie B.
    le premier thread reprend la main et termine le A = B sauf que B n'a plus la même valeur.

    Ou est ce impossible ?
    Est ce bien ta question ? Si oui et que ton programme est en écrit en C alors tu auras probablement une réponse rapide sur le forum adapté.
    Je suis également interressé par cette réponse.

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 107
    Points : 82
    Points
    82
    Par défaut
    Bonjour

    Désolé j'ai peut être mal formulé ma question mais oui tu as bien résumé la situation.

    Merci de ton aide

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Oui. Il y a bien sûr aucune garantie quant à savoir qui du thread 1 ou du thread 2 écrira dans B en dernier. C'est la définition même d'un problème d'accès concurrent en environnement multi-threads.

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Il me semble que les mutex et les sémaphores règlent justement ces problèmes d'accès aux variables partagées entres threads ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Il me semble que les mutex et les sémaphores règlent justement ces problèmes d'accès aux variables partagées entres threads ?
    Oui cela sert justement à ça

    Ex : th2 interrompt th1 au niveau de la recopie du 2em octets de b dans a
    En relisant ton message, je vois ça : la réponse est sans doute non. Il faut regarder le jeu d'instruction assembleur, mais il y a en généralement des opérateurs pour copier 32 bits par 32 bits sur une architecture 32 bits. Donc tu auras une valeur correcte mais tu ne peux pas garantir qu'un thread écrase les 32 bits que l'autre thread s'apprête à lire. En revanche, tu n'as pas forcément d'instruction pour copier 64 bits d'un coup, qu'il faut alors copier 2 fois et donc potentiellement avec préemption au milieu.

    La question me fait penser à cet article intéressant : http://www.blaess.fr/christophe/2012...non-atomicite/

Discussions similaires

  1. accès multi thread
    Par r2d2abc dans le forum JDBC
    Réponses: 14
    Dernier message: 04/01/2010, 17h26
  2. [Multi-thread] Comment lock l'acces a un containeur de la STL ?
    Par Izidor's dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 14/10/2009, 12h09
  3. [EF] Accès multi thread
    Par dev01 dans le forum Accès aux données
    Réponses: 27
    Dernier message: 27/03/2009, 15h08
  4. [MT] Galère avec thread et mutex pour accès variable
    Par wadcyr8_197 dans le forum Threads & Processus
    Réponses: 36
    Dernier message: 26/07/2007, 14h45
  5. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00

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