2009-06-02 11 views
1

Ich habe ein benutzerdefiniertes CMS, in dem ich ein statisches XElement als Sitemap verwende. Wenn Aktualisierungen in der Map auftreten, synchronisiere ich die Writer-Threads, tue aber nichts mit den Lesegeräten und erlaube ihnen nur, das XElement zu greifen, wenn sie es brauchen.Geteiltes XElement als SiteMap

Beim Testen dachte ich, wenn ich das XElement aus einem Leser-Thread aufzählte, während ich es auf einem anderen Schreib-Thread aktualisierte, würde ich eine Ausnahme bekommen. Das war nicht der Fall. Ich frage mich nur, ob irgendjemand mir erklären kann, wenn sie irgendwelche größeren Probleme mit diesem Ansatz sehen. Es scheint nicht so, als sollte es sicher sein, aber all meine bisherigen Tests haben gezeigt, dass es so ist.

Antwort

0

Verwenden Sie eine System.Threading.ReaderWriterLock, um den Zugriff auf das XElement zu steuern. Auf diese Weise synchronisieren Sie alle Reader und alle Writer, ohne gleichzeitige Leseaktivitäten zu blockieren.

+0

Sollte die Sperrung auf dem XElement selbst oder einem gemeinsamen statischen Objekt erfolgen? – user115963

+0

Sie werden in diesem Fall die Sperrfunktion nicht verwenden (die intern die Monitor-Klasse verwendet, denke ich). Sie würden eine statische Instanz von ReaderWriterLock erstellen, die Ihr "Lock" -Objekt wäre, das Sie dann AquireReaderLock- oder AcquireWriterLock-Methoden nach Bedarf aufrufen. Beachten Sie, dass Sie dafür verantwortlich sind, dass Sie die entsprechende Release-Methode auch unter Fehlerbedingungen aufrufen. Daher müssen Sie sicherstellen, dass Sie nach dem Erhalt einer Sperre einen Try-Block eingeben und den entsprechenden Release-Aufruf in den Finally-Block aufnehmen. – AnthonyWJones