Utilisez PulseAll
lorsque vous souhaitez réactiver plusieurs threads, car la condition qu'ils attendent peut être remplie pour plusieurs threads. (Attente est presque toujours associé à une condition - vous devriez généralement tester cette condition dans une boucle while
.)
Utilisez Pulse
quand vous voulez pour se réveiller un fil, car un seul fil sera effectivement en mesure de faire utile travail.
Pour donner deux analogies:
Imaginez que vous avez une seule imprimante. Une seule personne peut l'utiliser à la fois, donc si vous avez beaucoup de gens qui attendent, vous les envoyez tous dormir - mais vous ne faites que réveiller une personne lorsque l'imprimante est libre. Cela reflète l'utilisation de Pulse
.
Imaginez maintenant que vous exploitez un magasin. Pendant que vous êtes fermé, les clients attendent à l'extérieur du magasin. Lorsque vous ouvrez la boutique, vous ne voulez pas simplement réveiller un client - ils peuvent tous entrer maintenant. Cela reflète l'utilisation de PulseAll
.
Remarque intelligente: 'Pulse' cause un problème,' PulseAll' provoque toutes sortes de problèmes. Vous devriez vraiment utiliser 'ManualResetEvent' ou' AutoResetEvent'. –