thread - variable partagée non souhaitée
Bonjours,
J'ai un thread qui exécute ceci :
Edition : ajout du code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| void *task_write_in_buffer (void *p)
{
struct data *p_data = p;
struct shared *psh = p_data->psh;
sFIFO *pTempfifo = psh->pfifo;
char buff[40];
int i = 0;
if(p != NULL )
{
while(1)
{
sprintf(buff,"%s : %d\r\n", p_data->sid,i);
pthread_mutex_lock (&psh->mut);
fifoenter(pTempfifo,buff);
pthread_cond_signal (&psh->synchro);
pthread_mutex_unlock (&psh->mut);
i++;
msleep (500);
}
}
return NULL;
}
} |
J'ai une fifo partagée entre plusieurs threads, celui ci dessus qui y ajoute une chaîne de caractère.
Et un autre qui dépile et affiche le contenue de la pile.
Je me suis rendu compte que si je crée deux thread qui exécute le code ci-dessus, la variable "i" est partagé entre eux :aie:
Comment ce fait t'il que i soit partagé entre les deux thread et comment ce fait t'il qu'il n'est pas était décrémenté (cf ci-dessous en vert) ?
Sortie du thread qui depile la fifo :
task A : 1
Task C : 2
Task C : 3
task A : 4
Task C : 5
task A : 6
Task C : 7
Task C : 7
task A : 8
Task C : 9
Task C : 10
Merci d'éclairer ma lanterne :mrgreen: