Windows fournit un certain nombre d'objets utiles pour synchroniser les threads, tels que les événements (avec SetEvent
et WaitForSingleObject
), les mutex et les sections critiques.Pourquoi les bibliothèques implémentent-elles leurs propres verrous de base sur Windows?
Personnellement, je les ai toujours utilisés, en particulier les sections critiques, car je suis à peu près certain qu'elles n'engendrent que très peu de frais généraux, à moins qu'elles ne soient déjà verrouillées. Cependant, en regardant un certain nombre de bibliothèques, telles que boost, les gens vont alors avoir beaucoup de mal à implémenter leurs propres verrous en utilisant les méthodes imbriquées sur Windows.
Je peux comprendre pourquoi les gens écriraient des files d'attente sans verrous et autres, puisque c'est un cas spécialisé, mais y a-t-il une raison pour que les gens choisissent d'implémenter leurs propres versions des objets de synchronisation de base?
En regardant boost \ thread \ win32 \ basic_timed_mutex.hpp Je ne vois aucune utilisation des objets de threading win32, tout semble être fait avec les méthodes imbriquées, qui utilisent des instructions CPU spéciales de toute façon qui sont atomiques. –
Les méthodes interbloquées sont également à la base de certains objets de synchronisation Win32, c'est tout ce dont vous avez vraiment besoin pour dire mutex ou select. – Blindy
Les méthodes interverrouillées font partie de l'API Win32. Ils ne sont pas plus portables que les objets de synchronisation Win32 de haut niveau. – jalf