Thread et accès à une variable par 2 threads en même temps... [C/C++] - C++ - Programmation
Marsh Posté le 02-05-2003 à 18:07:35
| ANTSite a écrit :    Salut,  | 
 
 
CriticalSection.
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 ?
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 
 
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)  | 
 
 
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...
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;   
 
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  
 
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)
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...