Synchronisation multithread

Signaler
Messages postés
5
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
16 avril 2004
-
Messages postés
5
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
16 avril 2004
-
salut a tous,

je developpe une appli faisant tourner 2 threads.
je synchronise mes deux thread grace a une variable globale : il y a un thread qui met a jour cette variable, tandiske l'autre thread attend la modif de cette variable.

J'ai pu lire dans un tutoriel API windows qu'il etait deconseillé d'attendre dans une boucle au sein d'un thread le changement d'etat d'une variable globale.

Que dois je faire pour booster mon appli ?
est il recommandé d'utiliser un mutex ?

merci d'avance pour vos conseils.

3 réponses

Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
ya des objets plus elaborés pr la synchronisation, genre les event. HANDLE evenement = CreateEvent(NULL,true,false,NULL);
et if (WaitForSingleObject(evenement,0) == WAIT_OBJECT_0)
pour tester l'etat de evenement (signalé ou non signalé)(SetEvent( ... ) permet de signaler un Event).
bref le prob cé ke 'evenement' doit etre une variable partagé par les 2 threads, mais la c'est pas un probleme, vu que WaitForSingleObject(evenement,0) se débrouille bien.
(le 0 correspond a un temps d'attente de 0ms, si tu mets 5000, ca va bloquer pdt 5 sec, et renvoyer WAIT_TIMEOUT si l'evenement a pas été signalé, et ca va bloquer pdt moins longtemps si entre temps tu le signales depuis l'autre thread, et la ca renvoie WAIT_OBJECT_O)
en gros kan t'as 2 threads, partager une variable (classique) ds laquelle un peu ecrire et l'autre lire n'est pas une bonne idée ! et qd les deux peuvent y ecrire, ca peu faire des resultats imprévus. (genre une incrementation ds chak thread, mé en meme temps peu conduire a une seule incrémentation de la var. globale)

en gros si le thread 2 veut attendre ke le thread 1 ait fé kek chose, ds le 2 tu mets WaitForSingleObject(evenement,INFINITE), et dans le 1 tu mets SetEvent(evenement) au moment ou le 2eme doit démarrer.

en mrelisant cé pas super clair du premier coup mais bon ;)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
le bouquin de Richter (JR4.zip)de donner tous les conseils sur la synchro thread:
http://brunews.free.fr/brunews/download
Messages postés
5
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
16 avril 2004

je vous remercie pour vos conseils.

je vais etudier ca de suite.
merci encore une fois !