Skip to content

Instantly share code, notes, and snippets.

@kumpera
Created November 1, 2011 14:50
Show Gist options
  • Save kumpera/1330678 to your computer and use it in GitHub Desktop.
Save kumpera/1330678 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Threading;
namespace RWLockSlimTest
{
class MainClass
{
/* On MS this method prints:
(1) RR 0/False RU 0/False RW 0/False
(2) RR 0/False RU 0/False RW 1/True
(3) RR 0/False RU 1/True RW 1/True
(4) RR 0/False RU 0/False RW 1/True
(5) RR 0/False RU 0/False RW 0/False
(6) RR 0/False RU 0/False RW 1/True
(7) RR 0/False RU 0/False RW 0/False
*/
public static void Main(string[] args)
{
ReaderWriterLockSlim rwlock = new ReaderWriterLockSlim (LockRecursionPolicy.SupportsRecursion);
Console.WriteLine ("(1) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.EnterWriteLock ();
Console.WriteLine ("(2) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.EnterUpgradeableReadLock ();
Console.WriteLine ("(3) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.ExitUpgradeableReadLock ();
Console.WriteLine ("(4) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.ExitWriteLock ();
Console.WriteLine ("(5) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.EnterWriteLock ();
Console.WriteLine ("(6) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
rwlock.ExitWriteLock ();
Console.WriteLine ("(7) RR {0}/{1} RU {2}/{3} RW {4}/{5}",
rwlock.RecursiveReadCount,
rwlock.IsReadLockHeld,
rwlock.RecursiveUpgradeCount,
rwlock.IsUpgradeableReadLockHeld,
rwlock.RecursiveWriteCount,
rwlock.IsWriteLockHeld);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment