Thread et multiprocesseur

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 29 sept. 2005 à 09:42
themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 8 oct. 2005 à 17:34
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

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
30 sept. 2005 à 20:44
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.
0
themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 2
8 oct. 2005 à 17:34
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!!
0
Rejoignez-nous