Quels sont les facteurs à garder à l'esprit tout en choisissant entre les sections critiques, le mutex et les serrures de spin? Tous prévoient la synchronisation, mais y a-t-il des directives spécifiques sur quand utiliser quoi? P>
Edit: J'ai signié la plate-forme Windows car elle a une notion de sections critiques en tant que construction de synchronisation. P>
3 Réponses :
Dans Windows Parlance, une section critique est un hybride entre une serrure de spin et une attente non occupée. Il tourne pendant une courte période, alors - s'il n'a pas encore saisi la ressource - il établit un événement et l'attend. Si la conflit de la ressource est faible, le comportement de verrouillage de la spin est généralement suffisant. P>
Les sections critiques constituent un bon choix pour un programme multithreadé qui n'a pas à craindre de partager des ressources avec d'autres processus. P>
Un mutex est un bon verrouillage général. Un mutex nommé peut être utilisé pour contrôler l'accès entre plusieurs processus. Mais il est généralement un peu plus cher de prendre un mutex que d'une section critique. P>
a Mutex dans Windows est en fait un Mécanisme de concurrence interprocessé, ce qui le rend incroyablement lent lorsqu'il est utilisé pour le filetage intraprocessé. Un section critique est l'analogue Windows au mutex Vous pensez normalement. P>
Les serrures de spin sont mieux utilisées lorsque la ressource contestée n'est généralement pas détenue pour un nombre important de cycles, ce qui signifie que le fil qui a la serrure va probablement le donner bientôt. P>
Edit: Ma réponse est uniquement pertinente à condition que vous signiez «sur Windows», j'espère que c'est ce que vous vouliez dire. P>
points généraux à considérer: p>
Dans une situation donnée 1 ou 2 peut être plus important. P>
E.g. P>
Si vous utilisez un algorithme multi-threading pour écrire un algorithme de haute performance en utilisant de nombreux cœurs et en utilisant de nombreux cœurs et que vous devez protéger certaines données pour un accès sûr, 1 est probablement très important. P>
Si vous avez une application dans laquelle un thread de fond est utilisé pour sonder pour certaines informations sur une minuterie et sur une occasion rare, il notine une mise à jour que vous devez protéger certaines données pour que 2 est probablement plus important que 1. p>
1 sera réduit à la mise en œuvre sous-jacente et probablement à la portée de la protection par ex. Un verrou interne à un processus est normalement plus rapide qu'un verrouillage à tous les processus d'une machine. P>
2 est facile à mal juger. Les premières tentatives d'utilisation des serrures pour écriture de fil de sécurité ne manquent normalement pas certains cas qui mènent à une impasse. Une simple impasse se produirait par exemple si le filetage A attendait sur une serrure tenue par le fil b mais le fil b attendait une serrure tenue par fil A. Étonnamment facile à mettre en œuvre par accident. P>
sur une plate-forme donnée, la nommage et les qualités de mécanismes de verrouillage peuvent varier. P>
sur les sections critiques Windows sont rapides et spécifiques à des processus, les mutiles sont plus lentes mais transversales. Les sémaphores offrent des cas d'utilisation plus compliqués. Quelques problèmes par exemple L'attribution d'une piscine peut être résolue de manière très efficace en utilisant des fonctions atomiques plutôt que des serrures. sur Windows Interlockedincrement qui est vraiment rapide. P>
Duplicaté possible - Différences , mais ne peut pas être ce que veut .
Non, je ne voulais pas les différences plutôt que les points à garder à l'esprit tout en choisissant une construction de synchronisation.