public void Test() { System.Console.WriteLine("\nTest case 3 start!"); ReentrantReaderWriterLock rwLock = new ReentrantReaderWriterLock(); ManualResetEvent mre = new ManualResetEvent(false); int threadCount = 2; // 测试读锁重入写锁 Task.Run(() => { rwLock.EnterWriteLock(); rwLock.EnterReadLock(); rwLock.EnterReadLock(); System.Console.WriteLine("读锁重入写锁成功"); rwLock.ExitReadLock(); rwLock.ExitReadLock(); rwLock.ExitWriteLock(); Interlocked.Decrement(ref threadCount); if (threadCount == 0) { mre.Set(); } }); // 测试写锁重入写锁 Task.Run(() => { rwLock.EnterWriteLock(); rwLock.EnterWriteLock(); rwLock.EnterWriteLock(); System.Console.WriteLine("写锁重入写锁成功"); rwLock.ExitWriteLock(); rwLock.ExitWriteLock(); rwLock.ExitWriteLock(); Interlocked.Decrement(ref threadCount); if (threadCount == 0) { mre.Set(); } }); mre.WaitOne(); // 测试读锁重入读锁 Task.Run(() => { rwLock.EnterReadLock(); rwLock.EnterReadLock(); System.Console.WriteLine("读锁重入读锁成功"); rwLock.EnterReadLock(); rwLock.EnterReadLock(); }); }
public TestCase2() { readWaitTime = 0; writeWaitTime = 0; readerWriterLock = new ReentrantReaderWriterLock(); writerThreadNum = 0; readerThreadNum = 0; totalThreadNum = 1024; finishedWorkerCount = 0; finished = new AutoResetEvent(false); monitorLockObj = new object(); baselineWriterWaitCount = 0; }