public static void AtomicRecursiveReaderTest()
{
var trwl = new TestReaderWriterLock();
trwl.AcquireReaderLock();
Action waitForWaitingWriter;
Thread waitingWriter =
ThreadTestHelpers.CreateGuardedThread(out waitForWaitingWriter, () =>
{
trwl.AcquireWriterLock();
trwl.ReleaseWriterLock();
});
waitingWriter.Start();
ThreadTestHelpers.WaitForCondition(() => (waitingWriter.ThreadState & ThreadState.WaitSleepJoin) != 0);
// Acquire a recursive read lock successfully while there is a waiting writer
trwl.AcquireReaderLock();
// Releasing both read locks releases the waiting writer
trwl.ReleaseLock();
waitForWaitingWriter();
trwl.Dispose();
}