none
Frage zu ReaderWriterLockSlim RRS feed

  • Frage

  • 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

    Montag, 26. August 2013 14:49

Antworten

  • Hallo,

    mittels ReaderWriterLockSlim und dessen Methode EnterUpgradeableReadLock kann eine solche Situation behandelt werden.

    Viele Grüße,
    Christian

    • Als Antwort markiert Christian315 Dienstag, 27. August 2013 09:27
    Dienstag, 27. August 2013 09:27