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

Threads & Processus C++ Discussion :

Conflit de Thread


Sujet :

Threads & Processus C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par d�faut Conflit de Thread
    Salut !

    Je ne suis pas expert en C++, j'ai ecris pas mal de programes mais je ne me suis jamais vraiement lanc� sur les threads.

    Je bosse sous linux, j'ai etudi� � droite et � gauche les threads mais je n'ai pas trouv� de r�ponse � ma question. Il me semble avoir compris que pour lire des donn�es, les threads ne pausent pas de soucis. La ou �a coince c'est quand on modifie des variables. La dessus vive les mutex et autres s�maphores. Ce que je ne pige pas c'est quel est le seuil critique...

    Je veux dire est-ce critique si 2 thread cherchent � modifier le m�me int en m�me temps ? Est-ce q'un troisieme thread qui cherche � lire ce int peut avoir autre chose que la valeur du thread 1 ou 2 ? Est-ce qu'il peut y avoir un crash du preocess � ce stade ?


    Je me pose la m�me question pour ce qui est des pointeurs. Si je cherche � acceder � un objet :

    a->b->c->monInt=10

    Est-ce q'il peut se passer qq chose entre a->b et b->c ? Est-ce q'un thread peut avoir le temps d'effectuer une tache alors que le premier est en train de rentrer dans l'arbre ?

    Merci � vous !

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Les probl�mes de concurrence ne peuvent se poser bien �videmment que si plusieurs threads tentent de modifier une valeur de mani�re concurrente, ou si certains tentent de lire pendant que d'autres la modifient.

    Avec un seul c�ur, r�aliser toute op�ration non atomique en concurrence est dangereux.
    Avec plusieurs c�urs, r�aliser toute op�ration atomique en concurrence sans barri�res est aussi dangereux.

    En pratique, je doute que �a puisse planter, tu auras juste une valeur non d�finie.

    Pour bien faire les choses, il faut donc utiliser les primitives de synchronisation de la biblioth�que de threads que tu utilises.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par d�faut
    Merci loufoque

    Donc j'imagine que a->b->c->monInt=10 est pas atomique !

    Comment savoir ce que fait le compilateur deriere tout �a pour determiner ce qui est atomique et ce qui ne l'est pas ?

    EDIT : Je pose cette question pour eviter les deadlock qui dans mon cas risque de couter cher au systeme :/

  4. #4
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Citation Envoy� par seal3 Voir le message
    Donc j'imagine que a->b->c->monInt=10 est pas atomique !
    Ca d�pend, c'est quoi la variable/zone m�moire partag�e et � prot�ger ?

    Si c'est juste "monInt", cette op�ration doit �tre atomique. par contre si l'un des pointeurs a, b et/ou c qui est partag� entre les threads, l� effectivement, l'op�ration risque de ne plus �tre atomique puisque l'�valuation doit �tre faite.

    Pour info, monInt = monInt + 5 n'est pas atomique non plus.

    Citation Envoy� par seal3 Voir le message
    Comment savoir ce que fait le compilateur deriere tout �a pour determiner ce qui est atomique et ce qui ne l'est pas ?
    En regardant le code assembleur g�n�r� ou alors en lisant les spec (d�sol�, j'ai pas mieux). En g�n�ral, les op�rations atomiques sont clairement indiqu�es.
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par d�faut
    Merci beaucoup pour les infos

  6. #6
    Expert confirm�

    Homme Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    4 253
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par d�faut
    J'ajouterai (comme l'a dis loufoque mais peut �tre en moins clair), sur les processeurs actuels, *aucune* op�ration n'est vraiment atomique sans la pose explicite de "barri�re". De toute mani�re, cette mani�re de programmer ne "tiens" pas la route (machines multi-processeurs).

    Il ne sert donc � rien de regarder le code g�n�r�... par telle ou telle instruction C++ elle ne sera de toute mani�re pas prot�g�e (� moins de forcer explicitement le programme � tourner sur un seul coeur).

    Tous les OS (et CPU multi-coeurs) proposent des instructions de barrieres (comme InterlockedIncrementAcquire / InterlockedIncrementRelease ...)... mais qui ne sont pas sans co�t...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 5
    Dernier message: 08/10/2009, 16h28
  2. Tri multi-thread�
    Par Tifauv' dans le forum C
    R�ponses: 8
    Dernier message: 28/06/2007, 09h00
  3. conflits avec plusieurs thread ?
    Par ac/dc dans le forum C++Builder
    R�ponses: 4
    Dernier message: 16/04/2007, 20h47
  4. R�ponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    R�ponses: 1
    Dernier message: 25/04/2002, 13h53

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