In der Warteschlange, Enqueue und Dequeue beide benötigen eine Schreibsperre. Warum sollte jemand ReaderWriterLockSlim verwenden anstatt nur die Sperre {}? Als BeispielSperrmechanismus für die Warteschlange <T> während der Warteschleife und aus der Warteschlange
ReaderWriterLockSlim Mit
qLock.EnterWriteLock();
try
{
localQ.Enqueue(item); // or localQ.Dequeue(item)
}
finally
{
qLock.ExitWriteLock();
}
Versus Sperre {}
try
{
lock(qLock) { localQ.Enqueue(item);} // or localQ.Dequeue(item)
}
@Davita, Brians Antwort ist in diesem Fall falsch (aber normalerweise wahr). Es ist bedauerlich, dass es 3 Stimmen hat. –
danke an alle Antwort. Leider glaube ich nicht, dass ich meine Antwort schon habe. Ich bekomme den Peek() -Teil mit EnterReadLock(), aber wenn meine Logik nur Enqueue() und Dequeue() ist, brauche ich unabhängig von EnterWriterLock(). Wenn ich in einer Schleuse bin {} und sage, dass die Anschaffung sich auf unbestimmte Zeit verzögert oder sehr lang ist; Sperre bietet keine Fehlertoleranz und es ist möglich, in Deadlock oder ein Blockierungsszenario zu gelangen. Wäre nicht ReaderWriterLock oder ReaderWriterLockSlim bieten mir eine Fehlertoleranz-Option, um die Deadlock oder lange Blockierung zu vermeiden. Gedanken? oder bin ich hier weg vom Kurs – G33kKahuna