Die Sache ist, dass ich die Lock-Anweisung verwendet habe, um einen kritischen Teil davon zu schützen mein Code, aber jetzt, ich weiß, ich könnte die gleichzeitige Ausführung von diesem kritischen Code erlauben, wenn einige Bedingungen erfüllt sind.
Gibt es eine Möglichkeit, das Schloss zu konditionieren?
Um eine Race Condition zu vermeiden, wäre ich versucht, ein ReaderWriterLockSlim
- behandeln Sie den gleichzeitigen Zugriff als Lesesperre und den exklusiven Zugriff als Schreibsperre. Auf diese Weise werden Sie, wenn sich die Bedingungen ändern, nicht mit irgendeinem unpassenden Code enden, der immer noch blind in der Region ausgeführt wird (unter der falschen Annahme, dass es sicher ist); ein bisschen ausführlich, aber
(für Platz formatiert):
Verwenden Sie Double-checked locking pattern , wie oben vorgeschlagen. das ist der Trick IMO:)
stellen Sie sicher, dass Sie Ihr Sperrobjekt als statisch haben, wie im Beispiel von not.thave.dave.foley.myopenid.com aufgeführt.
Tags und Links .net c# multithreading locking