[CSemaphore] pourquoi ca me bloque pas ?
hello,
j utilise un Csemaphore pour gerer la concurrence entre 2 thread.
dans le premier thread, j initialise le compteur du semaphore à 1 et le nombre max à 1. (de manière à ce qu il soit non bloquant au debut et que 1 seul thread puisse etre à la fois dans le sem.)
Code:
m_pSem = new CSemaphore(1,1);
ensuite je bloque le semaphore dans une boucle de manière à ce que l itteration suivante soit precedée d une action d un autre thread :
Code:
1 2 3 4 5
| do{
CSingleLock l_Locker(m_pSemStopInstance);
l_Locker.Lock();
envoie d un signal à l autre thread;
}while(....); |
et evideament, apres reception du signal dans l autre thread je debloque le semaphore pour permettre au thread 1 de continuer avec son iteration 2 de la boucle.
Code:
1 2 3 4 5
|
reception du signal;
traitement;
CSingleLock l_Locker(m_pSem);
l_Locker.Unlock(); |
Le problème est que dans le thread 1 ( le premier), le deuxième passage sur le lock() n est pas bloquant, alors que le thread 2 n'as pas encore fais le unlock() ???