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.