Ist es möglich zu implementieren lock frei-map in C++

Entwickeln wir eine Netzwerk-Anwendung basierte C/S -, wir finden, es gibt zu viele Schlösser hinzufügen zu std::map, dass die Leistung der server wurde schlecht.

Frage ich mich, ob es möglich ist, implementieren Sie eine lock-frei-Karte, wenn ja, wie? Gibt es eine open-source-code?

BEARBEITEN:
Tatsächlich verwenden wir die std::map zu speichern sockets Informationen, die wir haben-Kapselung auf der Grundlage der socket-Datei Beschreibung, um einige andere notwendige Informationen wie ip-Adresse, port -, socket-Typ, die tcp-oder udp usw.

Zur Zusammenfassung, wir haben eine Globale Karte sagen, es ist

map<int fileDescriptor, socketInfor*> SocketsMap, 

dann jeden Faden, die verwendet wird, um Daten zu senden, muss der Zugang SocketsMap, und Sie müssen hinzufügen mutex vor dem Lesen von SocketsMap oder schreiben Sie SocketsMap, so ist die Parallelität der Ebene der gesamten Anwendung wäre wesentlich reduziert, weil so viele Schlösser addding zu SocketsMap.

Zu vermeiden, die concurrency-level-problem, wir haben zwei Lösungen: 1. speichern Sie jeden socketInfor* 2 separat. verwenden Sie irgendeine Art von lock-free-Karte.

Ich möchte zu finden eine Art von lock-free-Karte, weil die codes, die änderungen durch diese Lösung sind deutlich geringer als bei Lösung 1.

  • In aller fairness, dieser sagt ausdrücklich und C++, das speziell sagt C... Sie sind sehr verschiedene Sprachen, vor allem, wenn man bedenkt, atomaren Variablen.
  • ein sehr guter Punkt, sir. Ich werde reißen Sie den link.
  • Wenn Sie einen assoziativen container, aber erfordern nicht bestellen, könnte es einfacher sein, zu verwenden einen hash wie std::unordered_map. Es könnte schneller sein, auch mit Ihrem aktuellen grob-Verriegelung (vor allem, wenn Sie verschieben können, keine teuren hash-Berechnung außerhalb der gesperrten Bereich), aber ich vermute, dass eine gelegentliche teure re-hash ist auch einfacher zu handhaben als eine gelegentliche re-balance, für die optimistische lockfree-version.
  • Wie ist das Verhältnis von Lesern zu Autoren?
  • Ich bearbeitet die post, sehen Sie bitte den Teil BEARBEITEN.
  • Haben Sie sah von reader-writer-locks? Code tut-lookup verwenden Sie eine reader-lock. Code tut, einfügen oder löschen müssen, verwenden Sie einen Schreiber zu sperren. Mehrere Leser können auf die Daten gleichzeitig zugreifen. RW-locks sind gut, wenn Sie haben viel mehr Leser als Schreiber.

InformationsquelleAutor Steve | 2013-01-15
Schreibe einen Kommentar