2013-04-20 4 views
6

Ich schreibe ständig Mutex-Code, um den Lese-/Schreibzugriff auf eine std :: unordered_map und andere Container zu synchronisieren, so dass ich sie wie java.util.concurrent verwenden kann Behälter. Ich wollte gerade anfangen, einen Wrapper zu schreiben, um den Mutex einzukapseln, aber ich würde lieber eine gut getestete Bibliothek verwenden, damit ich das Threading nicht auffrische.C++ 11 Äquivalent von java.util.ConcurrentHashMap

Gibt es eine solche Bibliothek?

+1

Facebook Torheit, bietet es eine AtomicHashMap. https://github.com/facebook/folly?source=cr – inf

+0

Hmm, es ist besser, den Mutex in der Klasse zu haben, die die Karte besitzt und die Lese- und Schreibzugriffe mit geteiltem Mutex schützt, als die Karte zu umhüllen. – balki

+0

Facebook Torheit erlaubt Ihnen nicht, Kartenelemente/freien Speicher zu löschen – easytiger

Antwort

4

Intel produzierte eine Bibliothek namens Threading Building Blocks, die zwei solche Dinge hat: concurrent_hash_map und concurrent_unordered_map. Sie haben leicht unterschiedliche characteristics, aber die eine oder andere wird wahrscheinlich Ihren Bedürfnissen entsprechen.

+3

Danke, das sieht gut aus. Leider ist es GPL, das nicht mit dem kommerziellen Projekt kompatibel ist, an dem ich arbeite. –

+0

Das ist nicht wirklich so - check out http://threadingbuildingblocks.org/faq/10 - TBB ist Dual-lizenziert, wenn Sie also eine kommerzielle Lizenz benötigen und nicht GPL, es ist verfügbar. Ich empfehle es sehr. –

+0

Sie sind nicht ganz gleich. Die TBB-Map unterstützt kein gleichzeitiges Löschen im Gegensatz zu Java. – easytiger

1

Folly hat eine AtomicHashmap Implementierung. Die größte Einschränkung besteht darin, dass Sie nur int32 oder int64 Schlüssel verwenden können. Überprüfen Sie die Dokumentation here (speziell die Begrenzung Abschnitt)