Hallo zusammen,
ich habe eine Klasse mit einer internen Verwaltungsliste. Auf diese Verwaltungsliste wird häufig lesend als schreibend zugegriffen. Es gibt eine Einsprungsfunktion, die einige Prüfungen auf die Verwaltungsliste vornimmt und evtl. modifiziert. Ich dachte
mir, dass ich hierfür ein ReaderWriterLockSlim verwende. Meine Funktion schaut ungefähr wie folgt aus:
public ResponseObject Request(RequestData request)
{
if(Check1(request)) // lesender Zugriff auf Verwaltungsliste
{
ReadData(); // lesender Zugriff auf Verwaltungsliste
return new ResponseObject();
}
if(Check2(request)) // lesender Zugriff auf Verwaltungsliste
{
ModifyData(); // schreibender Zugriff auf Verwaltungsliste
return new ResponseObject();
}
return new ResponseObject();
}
Ursprünglich wollte ich den ReaderWriterLockSlim innerhalb der einzelnen Methoden (z.B. Check1, Check2, ModifyData) entsprechend verwenden. Hierdurch kann mir jedoch evtl. ein anderer Thread dazwischen kommen, d.h. Thread1 landet bei Check2, geht
aus dem synchronisierten Codeabschnitt (Check2) raus und möchte ModifyData aufrufen. Bevor dies geschieht, kommt Thread2 zur Ausführung und modifiziert die synchronisierte Verwaltungsliste, so dass das zuvor für Thread1 gelieferte Ergebniss aus Check2 nicht
mehr gültig ist.
Wie kann ich dies bitte elegant und performant lösen?
Danke und viele Grüße,
Christian