Ich habe die folgende Situation: Ich möchte den Zugriff auf ein Objekt gleichzeitig ausschließen.Können Schloss und Monitor auf demselben Objekt sicher verwendet werden?
Bisher normaly würde ich ein Sperrobjekt
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
Jetzt benutze ich habe auch ein Verfahren, das von einem anderen Thread aufgerufen werden kann. Es sollte nicht für eine unbekannte Zeit blockiert werden, stattdessen sollte es eine Antwort in einer definierten Zeit geben.
In diesem Fall ich einen Monitor verwenden würde, wie
method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
Nun meine Frage: sperren und Monitor so gemischt werden, wenn die LockObject gleich ist und sich gegenseitig ausschließen, oder würde Es wird benötigt, um jede Sperre auf einen Monitor zu ändern.
Also beide Male das gleiche Token "gesperrt" sein, oder würde der Monitor ein anderes Token für das Objekt dann die Sperre erstellen?
Auf einen Blick kann ich nicht sehen, dass die Anwendung im Code von beiden zur gleichen Zeit läuft. Aber ich weiß nicht, ob Timing-Probleme existieren können, wo CODE1 und CODE2 parallel ausgeführt werden.
Ich fühle deinen Schmerz; Ich wünschte oft, dass das 'lock'-Schlüsselwort irgendwie eine Zeitüberschreitung hat –