Dies ist eine theoretische Frage; Ich habe kein tatsächliches Problem zu lösen, ich möchte nur das Verständnis dafür bekommen, warum dies funktioniert.
Ich habe herausgefunden, dass, wenn ein Thread versäumt, einen ReaderWriterLock zu verlassen, andere Threads nach Beendigung des ursprünglichen Threads den Lock nicht erhalten können. Gibt es einen guten Grund dafür, dass ReaderWriterLock den Lock nicht an wartende Threads vergibt, sobald der Thread, der den Lock besitzt, endet?
Hier ist ein Testfall, der das Problem demonstriert.
static void Main(string[] args)
{
ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim();
Thread t1 = new Thread((a) =>
{
readerWriterLock.EnterReadLock();
// dieser Thread lässt es aus, den Lock zu verlassen....
});
Thread t2 = new Thread((a) =>
{
readerWriterLock.EnterWriteLock();
});
t1.Start();
t2.Start();
// warte darauf, dass alle Threads beendet sind
t1.Join();
t2.Join();
}