Bonjour,
pour bien comprendre le fonctionnement des threads, mutex et plus, mais plus tard, je commence par écrire un système classique avec 1 producteur qui écrit dans un buffer/1 consommateur qui lit le buffer. Un thread pour chacun et deux mutex pour la synchro.
Mon 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
 
//Thread principal
//instancier un mutex buffer vide
MutexBufVide = CreateMutex(NULL, false, NULL);
//instancier un mutex buffer plein
MutexBufPlein = CreateMutex(NULL, true, NULL);
//instancier un thread consommateur
Consommateur = new ThreadConso(false);
//instancier un thread producteur
Producteur = new ThreadProducteur(false);
 
//Thread consommateur
//le consommateur attend que le mutex buffer plein soit libre
WaitForSingleObject(MutexBufPlein, INFINITE);
Form1->Memo1->Lines->Add("Le consommateur lit le buffer");
//relâcher le mutex MutexBufVide
ReleaseMutex(MutexBufVide);
 
//Thread producteur
WaitForSingleObject(MutexBufVide, INFINITE);
Form1->Memo1->Lines->Add("Le producteur écrit dans le buffer");
ReleaseMutex(MutexBufPlein);
Le thread producteur "écrit" bien dans le buffer et relâche le mutex avant de se terminer. Mais le thread consommateur ne le voit pas et reste en attente sur le WaitForSingleObject().
Si je permute le second argument de CreateMutex(), true <--> false, le consommateur peut "lire" mais c'est le producteur qui reste bloqué.
Quelqu'un peut me dire où est mon problème?
Merci.