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...