Laden...

Was passiert bei Monitor.Enter, wenn ein anderer Thread den Bereich bereits betreten hat? [=>wartet]

Erstellt von snsewill vor 10 Jahren Letzter Beitrag vor 10 Jahren 802 Views
Thema geschlossen
S
snsewill Themenstarter:in
18 Beiträge seit 2013
vor 10 Jahren
Was passiert bei Monitor.Enter, wenn ein anderer Thread den Bereich bereits betreten hat? [=>wartet]

Hallo,

wenn ich zwei Threads habe und diese auf die gleiche Variable zugreifen wollen

kann ich ja mit

 
Monitor.Enter(_locker);
    ...zugriff auf Variable...
Monitor.Exit(_locker); 

bewirken, dass nur einer der Threads auf diese Variable zugreift.

Aber was macht der andere Thread wartet der so lange oder überspringt er diesen Teil?

Hinweis von herbivore vor 10 Jahren

Statt der Konstruktion mit Enter und Exit sollte man besser lock verwenden, weil dann das Exit auch im Falle einer Exception im geschützten Bereich ausgeführt wird.

lock (x) {
   ...
}

entspricht

Monitor.Enter (x);
try {
   ...
}
finally {
   Monitor.Exit (x);
}
L
416 Beiträge seit 2008
vor 10 Jahren
Hinweis von herbivore vor 10 Jahren

Bitte schau das nächste Mal, wenn du wissen willst, was genau eine Methode tut, von alleine in deren Doku, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.

Thema geschlossen