Bonjours,
J'ai un thread qui exécute ceci :

Edition : ajout du code
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;
}
        }
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

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