Salut,
j'essaie d'implémenter le probleme des lecteurs ecrivains en multithread en visual c++. Le problème est que lorsque j'ai un ecrivain réveillé, tous les autres le sont aussi (alors qu'il faudrait que le signal ne réveille qu'un seul écrivain).

Voici mon code du wait :
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
 
//	créer un Win32 event
	HANDLE hEvent = CreateEvent(NULL, TRUE,  // TRUE=manual, FALSE=auto
	         FALSE,  // signaled state
	         "WaitEvent"  // name of event; 
	       );
 
	SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);
 
//	mettre le event handle dans le wait set
	waitSet.push_back(hEvent);
 
 
//	relacher le verrou du moniteur
	m_CritSection.Unlock();
 
//	bloquer sur l'événement
	DWORD dwResult = WaitForSingleObject(  
				 hEvent,   // handle
				 INFINITE // timeout; milliseconds or INFINITE
			          );
 
//	acquerir le verrou	
	m_CritSection.Lock();
 
//	détruire l'évènement
	CloseHandle(hEvent);
 
	SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);
ainsi que mon code du signal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 
//prendre et retirer le plus vieil event handle du wait set
	if (!waitSet.empty()){
	HANDLE retEvent = waitSet.back();
	waitSet.pop_back();
 
//  mettre l'évènement à l'état signalé
	SetEvent( retEvent);
	}
}
Je ne sais pas où se trouve l'erreur...
Merci