Intelligente Lösung zum Speichern von Daten in xml threadsicher mit Boost

8

PROBLEM:

Ich entwickle einen Server mit Boost und es gibt eine XML-Datei, aus der bei der Initialisierung einige Daten vom Hauptthread geladen werden.

Während der Ausführung können einige Änderungen passieren und sollten in der XML-Datei gespeichert werden. Zu diesem Zweck wurde eine Funktion store () in einer Klasse namens Database:

implementiert %Vor%

Wenn ich Änderungen von einem anderen Thread als dem Haupt speichern möchte, der die Klasse Datenbank erstellt hat (z. B. eine Socket-Verbindung), schlägt xml fehl, wie es scheint Thread nicht sicher sein.

Mögliche Lösung:

Meine Idee ist es, eine Schleife im Server (Haupt-Thread) zu erstellen, die auf Benachrichtigungen von anderen Threads wartet, etwa so:

%Vor%

Auf diese Weise stürzt xml write nicht ab.

Frage :

  • Gibt es eine effizientere oder bessere Lösung für diese Art von Problem oder ist das der richtige Weg?
Jav_Rock 15.11.2012, 08:19
quelle

1 Antwort

3

Alles hängt davon ab, was der Haupt-Thread tut und wie das Programm entworfen und implementiert wird.

Die von Ihnen vorgeschlagene Lösung funktioniert einwandfrei, aber es wird ein einzelner Thread nur für die Verarbeitung von Schreibvorgängen in der XML-Datei verwendet.

Kennen Sie boost::asio ?

?

In irgendeinem Server würde ich boost::asio entweder mit einem einzelnen Thread oder einem Thread-Pool verwenden, der ioservice::run aufruft. Aktualisierungen der XML-Datei werden in die ASIO-Ereignisschleife "gepostet" und von einem der Worker-Threads in seinem Threadpool (d. H. Den Threads, die ioserive :: run genannt werden) ausgelöst / ausgeführt. Dies bedeutet, dass Ihr System weniger Threads verwendet und die Threads, die es verwendet, zahlreiche asynchrone Operationen ausführen können.

Hinweis: boost::asio::post wird verwendet, um eine Funktion innerhalb der asio-Ereignisschleife aufzurufen, mit der Sie den Zugriff auf die XML-Datei

steuern / serialisieren können

Siehe: boost::asio boost::asio::post

    
mark 15.11.2012 11:12
quelle

Tags und Links