themaste
Messages postés130Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention 8 juillet 2008
-
29 sept. 2005 à 09:42
themaste
Messages postés130Date d'inscriptionmardi 21 janvier 2003StatutMembreDerniè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?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 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.
themaste
Messages postés130Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention 8 juillet 20082 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!!