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.)
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 : Sélectionner tout - Visualiser dans une fenêtre à part m_pSem = new CSemaphore(1,1);
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 do{ CSingleLock l_Locker(m_pSemStopInstance); l_Locker.Lock(); envoie d un signal à l autre thread; }while(....);
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() ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 reception du signal; traitement; CSingleLock l_Locker(m_pSem); l_Locker.Unlock();
Partager