56 votes

C++11 équivalente à stimuler shared_mutex

Est-il C++11 équivalent pour le coup de pouce shared_mutex. Ou une autre solution pour faire face à un multiple de lecteur / écrivain situation en C++11?

71voto

Howard Hinnant Points 59526

J'ai essayé mais pas réussi à obtenir de l' shared_mutex en C++11. Il a été proposé pour un futur standard. La proposition est ici.

Edit: Une version révisée (N3659) a été accepté pour le C++14.

Voici une mise en œuvre:

http://howardhinnant.github.io/shared_mutex

http://howardhinnant.github.io/shared_mutex.cpp

18voto

Sean Cline Points 2899

Simple... Il n'en est pas une. Il n'y a pas de standard C++ mise en œuvre de lecteurs-graveurs de verrouillage.

Mais, vous avez quelques options ici.

  1. On vous laisse à vos propres appareils pour faire vos propres lecteurs-verrou en écriture.
  2. L'utilisation de la plate-forme de mise en œuvre spécifiques tels que Win32 l', POSIX est, ou du coup de pouce que vous mentionnez.
  3. N'utilisez pas un du tout -- utiliser un mutex qui existe déjà en C++11.

Va avec #1 et la mise en œuvre de votre propre est un effrayant entreprise et qu'il est possible d'énigme votre code avec des conditions de course si vous n'avez pas l'obtenir. Il y a une référence de mise en oeuvre qui peut rendre la tâche un peu plus facile.

Si vous souhaitez plate-forme indépendante de code ou ne veulent pas comprendre tout de bibliothèques supplémentaires dans votre code pour quelque chose d'aussi simple que d'un lecteur-écrivain de verrouillage, vous pouvez jeter #2 par la fenêtre.

Et, #3 a un couple de mises en garde que la plupart des gens ne réalisent pas: à l'Aide d'un lecteur-écrivain serrure est souvent moins performant, et a de plus difficile à comprendre que le code d'un montant équivalent de la mise en œuvre à l'aide d'un simple mutex. C'est parce que de l'extra-comptable qui a pour aller sur les coulisses de l'un des lecteurs-graveurs de verrouillage de la mise en œuvre.


Je ne peux que vous présenter vos options, c'est vraiment à vous de peser les coûts et les avantages de chacun et de choisir ce qui fonctionne le mieux.

0voto

Erbureth Points 2090

Je crois que vous êtes à la recherche pour les std::mutex ou std::lock_guard dans le fil de support de la bibliothèque. Toutefois, le soutien n'est pas répandue encore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X