C++ - Thread-Safe-Karte
Weiß jemand, wo ich finden kann ein implimentation, dass wraps eine std::map
und macht es thread-sicher? Wenn ich sage, thread-sichere ich meine, dass es bietet nur einen seriellen Zugriff auf die Karte, ein thread zu einem Zeitpunkt. Optimal, diese anzeigen sollten nur die standard-Bibliothek und /oder boost-Konstrukte.
InformationsquelleAutor der Frage Chris Andrews | 2009-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erfüllt nicht die Kriterien, die Sie angegeben haben, aber man konnte einen Blick auf die TBB Container. Es gibt so genannte
concurrent_hash_map
wodurch mehrere threads zugreifen, die gleichzeitig die Daten in der Karte. Es gibt einige details, aber alles ist schön dokumentiert und können Ihnen eine Vorstellung von der "concurrent container". Je nach Ihren Bedürfnissen, könnte dies völlig unangebracht...InformationsquelleAutor der Antwort Anonymous
Ist es in der Regel nicht eine gute Idee für die collection-Klassen bieten, thread-Sicherheit, denn Sie können nicht wissen, wie Sie verwendet werden. Sie wird viel besser gedient werden, durch die Umsetzung Ihrer eigenen sperren mechainisms in der höheren Ebene konstruiert, dass die Nutzung der Sammlungen.
InformationsquelleAutor der Antwort
Boost shared_mutex wäre die beste multiple-reader/single-writer-Ansatz für die Verpackung einer standard-Karte gegeben, Ihre Zwänge. Ich kenne keine "pre-built" - Implementierungen, die heiraten diese beiden, da die Aufgabe ist in der Regel trivial.
InformationsquelleAutor der Antwort Joe
Dies ist bis zu der Anwendung zu implementieren. Einen "thread-sicheren" Karte machen würde, einzelne Anrufe in der Karte, thread-sichere, aber viele Operationen vorgenommen werden müssen thread-safe über Anrufe. Die Anwendung, die die Karte nutzt, sollte associate ein mutex mit der Karte und verwenden Sie das mutex zu koordinieren, greift darauf zu.
Versuchen, um thread-sichere Container war ein Fehler in Java, und es wäre ein Fehler in C++.
InformationsquelleAutor der Antwort Dan Breslau
Könnte man auf Thread-Sichere Template Library
InformationsquelleAutor der Antwort Jay
Versuchen, diese Bibliothek
http://www.codeproject.com/KB/threads/lwsync.aspx
Umgesetzt wird es in einer modernen c++ - Richtlinien-basierten Ansatz.
Hier einige Schnitt aus dem link zeigen, die Idee mit dem 'vector' Fall
InformationsquelleAutor der Antwort Mykola Golubyev
Ich kam mit dieser (dessen bin ich mir sicher verbessert werden kann, um mehr als zwei Argumente):
Das können Sie tun:
Wenn Sie möchten, verwenden Sie eine std::recursive_mutex und ein std::set, das würde auch funktionieren.
InformationsquelleAutor der Antwort Jerry
Es ist eine Aussage hier (von mir - shameless plug) , umschließt Objekte (einschließlich
STL
Container) für die effiziente (zero-cost -) thread-safe Zugriff:https://github.com/isocpp/CppCoreGuidelines/issues/924
Code zur Implementierung finden Sie hier:
https://github.com/galik/GSL/blob/lockable-objects/include/gsl/gsl_lockable
InformationsquelleAutor der Antwort Galik