Ist es möglich, eine sperrfreie Map in C ++ zu implementieren?

Wir entwickeln ein netzwerkanwendungsbasiertes C / S. Wir stellen fest, dass es zu viele Sperren gibt, die std :: map hinzufügen und die Leistung des Servers beeinträchtigen.

Ich frage mich, ob es möglich ist, eine Karte ohne Sperre zu implementieren, wenn ja, wie? Gibt es dort Open Source Code?

BEARBEITEN: Tatsächlich verwenden wir die std :: map, um Socket-Informationen zu speichern. Wir haben die Kapselung basierend auf der Beschreibung der Socket-Datei vorgenommen, um einige andere notwendige Informationen wie IP-Adresse, Port, Socket-Typ, TCP oder UDP usw. aufzunehmen.

Zusammenfassend lässt sich sagen, dass es sich um eine globale Karte handelt

map<int fileDescriptor, socketInfor*> SocketsMap, 

Dann muss jeder Thread, der zum Senden von Daten verwendet wird, auf SocketsMap zugreifen und Mutex hinzufügen, bevor er von SocketsMap liest oder in SocketsMap schreibt. Auf diese Weise würde die Parallelitätsstufe der gesamten Anwendung erheblich verringert, da so viele Sperren zu SocketsMap hinzugefügt werden.

Um das Problem der Parallelitätsebene zu vermeiden, haben wir zwei Lösungen: 1. Speichern Sie jedes socketInfor * separat. 2. Verwenden Sie eine Art von sperrfreier Zuordnung.

Ich würde gerne eine Art schlossfreie Karte finden, da die für diese Lösung erforderlichen Codeänderungen viel geringer sind als die von Lösung 1.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage