2012-10-18 3 views
6

Ich vermisse sehr viel vom neuen Standard der std::shared_lock Vorlagenklasse. In Boost.Thread gibt es boost::shared_lock, auch existiert.Wie erstellt man einen shared_lock oder upgrade_lock in C++ 11?

Warum ist das, gibt es keine std :: shared_lock und std::unique_lock in C++ 11?
Wie ist es möglich, ein ähnliches Verhalten wie boost::shared_lock zu haben, aber in reinem C++ 11?

Ich dachte, boost::shared_lock<std::mutex> zu verwenden, aber das hat nicht so viel Sinn, da std::mutex kein lock_shared() Mitglied hat. Und auch gibt es keine wie std::shared_mutex.

+0

Wenn Sie bereits Boost verwenden, dann ist es offensichtlich nicht sinnvoll Boost :: shared_mutex zugunsten von 'std :: mutex' zu vermeiden. –

Antwort

11

Howards Vorschlag für std::shared_mutex wurde für C++ 11 wegen fehlender Zeit abgelehnt, um es richtig zu betrachten. Er hat es wieder für C++ 17 vorgeschlagen, und es wird diese Woche beim Treffen in Portland diskutiert.

In der Zwischenzeit, wenn Sie Boost verwenden können, dann können Sie auch; es wird keine neue Funktionalität geben, um standardisiert zu werden.

Das heißt, es lohnt sich zu überprüfen, ob die Verwendung shared_mutex tatsächlich von Vorteil ist - in vielen Fällen bietet es nicht die erhoffte Leistungssteigerung aufgrund der Konkurrenz auf dem Mutex selbst.

+0

Danke für deine Antwort Anthony. Seitdem habe ich etwas gegraben und fand diese Diskussion über Howards Vorschlag: http://permalink.gmane.org/gmane.comp.lib.boost.devel/211180 –