Bonjours,
J'ai un thread qui exécute ceci :
Edition : ajout du code
J'ai une fifo partagée entre plusieurs threads, celui ci dessus qui y ajoute une chaîne de caractère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
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
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
Partager