Thread et multiprocesseur

Signaler
Messages postés
130
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
8 juillet 2008
-
Messages postés
130
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
8 juillet 2008
-
Salut a tous!
Voila, j'ai une appli multithread, avec un principal, et 3 autres dit "secondaire".
Le premier est principale dans le sens ou c'est lui qui demande aux autres de s'arrêter.
Pour se faire, j'ai utilisé une variable globale, "BOOL g_ThreadEnds", qui est mis à TRUE lorsque le thread principal dit que c'est la fin.
Dans les autres threads, ils tournent sur un "while(!g_ThreadEnds)".
Du coup, et bien ils se terminent correctement.

Ma question est la suivante: Une personne m'a dit qu'en cas de multiprocesseur, une telle variable n'était pas bien, car il pouvait y avoir des problème. Il m'a alors parlé de la notion de variable "Volatile", ainsi que de la fonction "InterlockedExchange". Qu'en pensez-vous? Et dans ce cas, comment s'utilise ses notions?

Merci pour vos réponses
PS: J'ai également un problème lorsque mon appli de termine, j'ai a priori des tonnes de "Access Violation", mais je ne vois pas pourquoi. Auriez-vous des pistes?

Merci encore pour votre aide !!

2 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

C'est sur que si deux threads tentent d'acceder a ta variable en meme temp, il risque d'y avoir des problemes.

En utilisant les fonctions InterlockedExchange() et
InterlockedCompareExchange() pour manipuler ta variable, tu sera sur
que ta variable ne sera pas utilisée dans plusieurs threads
simultanement.
Messages postés
130
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
8 juillet 2008
1
Salut, et merci pour ta réponse!
Mais par contre, je ne vois pas du tout comment ca fonctionne. Comment dois-je utiliser ces fonctions InterlockedExchange et InterlockedCompareExchange, et la variable volatile? Je ne comprds pas comment il faut faire.
De plus, j'ai chercher des exemples, mais je n'en trouve pas.

Comment puis-je avoir l'équivalent d'une variable globale dans mon cas, sans risque avec multiprocesseurs?
Merci pour votre aide!!