boost TCP-Server Thread sicher machen?
-
Ich habe genau ein io_service-Objekt.
Also wohl einen Threadpool.
-
gandime schrieb:
Ich habe genau ein io_service-Objekt.
Also wohl einen Threadpool.Dann solltest Du die Zugriffe auf Deine Session-Map mit einem
strand-Objekt absichern. Das heisst, alle asynchronen Handler, die auf die Session-Map zugreifen, sollten mit einem strand::wrap vorbehandelt werden.Innerhalb einer Session musst Du gucken, ob Deine Handler in der Session sequentiell ausgeführt werden, oder ob potentiell mehrere Handler auf die gleichen Ressourcen zugreifen können. Zum Beispiel, wenn zwei asynchrone Operationen einen Buffer benutzen. Dann musst Du auch deren Handler wieder mit einem
strandwrappen.
Bei ausschließlich sequentieller Ausführung von Handlern musst Du Dir eigentlich keine Gedanken machen.
-
Wie würde ich dann das ganze bei z.B. der map machen und wie sieht das ganze mit anderen Member-Variablen aus?
Bei Google hab ich bis jetzt noch kein passendes Beispeil dazu gefunden!
-
Guck Dir mal die
boost.asioBeispiele an. Da wirst Du fündig werden.
Hier zum Beispiel.Link korrigiert...

-
file:///E:/devel/extern/boost_1_39_0/doc/html/boost_asio/tutorial/tuttimer5.html

-
a schrieb:
file:///E:/devel/extern/boost_1_39_0/doc/html/boost_asio/tutorial/tuttimer5.html

Fail. Epic fail.

-
ja von Tachyon
-
Wer im inet suchen kann der findet das dann schon^^
Aber ich hab das Bsp leider absolut nicht verstanden
Ich verstehe nicht was das ganze da macht
-
gandime schrieb:
Jetzt ist ja in jeder Session ein aktiver Thread wenn ich das richtig sehe!?
Wenn du nichtmal weisst welches Threading-Modell du verwendest, wie soll das dann überhaupt jemals irgendwas werden?
gandime schrieb:
Aber ich hab das Bsp leider absolut nicht verstanden

Ich verstehe nicht was das ganze da machtWundert mich garnicht. Die ASIO ist nicht gerade einfach. Sieht oberflächlich vielleicht einfach und kuhl aus, issi dann aber nicht. Also kuhl vielleicht, aber nicht einfach.
Nimm am besten was anderes als Basis für deinen Server.
-
Ich werde jetzt ganz bestimmt nicht noch eine andere Komponennte o.ä. benutzen!
Wie sehe ich denn welches Threading-Modell ich benutze?edit:
ist es nicht einfach durch mutex möglich die zugriffe sicher zu machen?boost::mutex::scoped_lock lock(mutex); ... lock.unlock();Oder kann es damit zu Problemen kommen?
Ich hab zwar ein paar Testläufe durchlaufen lassen aber wie man wissen sollte ist testen != verifikation!
Außerdem möchte ich langsam etwas profesioneller werden