[C/C++] Thread et accès à une variable par 2 threads en même temps...

Thread et accès à une variable par 2 threads en même temps... [C/C++] - C++ - Programmation

Marsh Posté le 02-05-2003 à 17:57:02    

  Salut,
Voila je me posais la question: si 2 threads accèdent en même temps à une variable globale, que se passe-t-il ? Oui les variables globales c'est pas le top mais dans un programme C parfois y a pas moyen de faire autrement...
Comment éviter ça ? Passer un argument au thread avec la variable pour ensuite... ben je sais pas comment faire.
En fait je veux quand même que les 2 threads modifient cette variable...

Reply

Marsh Posté le 02-05-2003 à 17:57:02   

Reply

Marsh Posté le 02-05-2003 à 18:07:35    

ANTSite a écrit :

  Salut,
Voila je me posais la question: si 2 threads accèdent en même temps à une variable globale, que se passe-t-il ? Oui les variables globales c'est pas le top mais dans un programme C parfois y a pas moyen de faire autrement...
Comment éviter ça ? Passer un argument au thread avec la variable pour ensuite... ben je sais pas comment faire.
En fait je veux quand même que les 2 threads modifient cette variable...


 
CriticalSection.

Reply

Marsh Posté le 02-05-2003 à 18:33:06    

Oui oui j'ai déjà utilisé, mais je voulais savoir à quoi s'expose-t-on si on ne le fait et si Critical Section est beaucoup employé ou pas dans les app à threads ?

Reply

Marsh Posté le 02-05-2003 à 18:47:47    

ben c koi le pb alors ? critical section et hop... (ou alors tout les autres trucs de synchro)
 
Sinon met ta var globale en volatile
 

Reply

Marsh Posté le 02-05-2003 à 18:59:06    

chrisbk a écrit :

ben c koi le pb alors ? critical section et hop... (ou alors tout les autres trucs de synchro)
 
Sinon met ta var globale en volatile
 
 


 
J'étais assez séduit par volatile mais j'arrive pas trop à m'en servir, une fois ma var en volatile je n'arrive plus à y avoir accès comme d'habitude, par exemple je mets volatile int i;
i= 10;
printf("%d", i); ben ça m'affiche rien...
J'y connais rien à volatile donc c'est peu être un truc tout con...

Reply

Marsh Posté le 02-05-2003 à 19:09:05    

pardon j'avais déclaré comme suit:
volatile int i;
au lieu de int volatile i;  :whistle:

Reply

Marsh Posté le 02-05-2003 à 19:21:09    

Tout dépend de ce que font les threads avec cette variable.
Parfois, il n'est pas utile d'utiliser de mécanisme de synchronisation. Mais faut faire attention à ce que tu fais :D

Reply

Marsh Posté le 02-05-2003 à 23:31:24    

mrBebert a écrit :

Tout dépend de ce que font les threads avec cette variable.

Yep, si tu es sous win32 :
 
* la lecture d'un dword n'a pas besoin d'être protégée. C'est une opération atomique pour les dwords alignés (que tout compilo win32 se doit de faire)
 
* l'incrément d'un dword / l'échange de 2 dwords peuvent se faire par les fonctions InterlockedXXX() (InterlockedIncrement(), etc)


Message édité par youdontcare le 02-05-2003 à 23:33:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed