équivalent du pthread_cond_wait de POSIX (unix) en visual C++
Bonjour,
Je code un programme sous visual studio avec un thread producteur et un thread consommateur, en passant par une FIFO.
Je voudrais que le consommateur s'endorme quand il voit qu'il n'y a plus rien a faire et que le producteur le réveille quand il rajoute du travail dans la FIFO.
J'ai donc besoin de fonctions équivalentes aux pthread_cond_wait et pthread_cond_signal de POSIX thread (unix) sous visual C++ (j'utilise les threads de System.Threading), mais je n'en ai pas trouvé dans msdn (à part suspend et resume, mais msdn dit qu'ils sont obsolètes et qu'ils vont être supprimés).
Est ce que quelqu'un connaitrait des fonctions pareilles?
Merci d'avance!
Le mutex ne sert qu'à sérialiser l'accès aux sections critiques.
Lorsque:
Citation:
Le problème est que le consommateur va faire un empty(), puis un pop(), mais que les deux appels ne formeront pas une instruction atomique. Un scenario "pas de chance" serait donc:
- _le consommateur fait un test pour voir si la FIFO est vide avec empty(), qui lui dit qu'elle est vide.
- _le producteur ajoute un élément à la FIFO et réveil le consommateur, qui ne s'est pas encore endormi.
- _le consommateur s'endort et attend un signal, qui est déjà passé et qui n'arrivera donc jamais.
Je ne vois pas trop comment 2, va pouvoir signaler quoique ce soit au consommateur. Il viendra pooler un peut plus tard la FIFO pour s'apercevoir qu'elle n'est plus vide et faire des pop.
En 3, le signal qu'attend le consommateur est peut être la fin du sleep pour recommencer le test.
- W