public void CreateNewWrite()
        {
            var locker = ReadWriteLocker.Create <List <int> >();

            using (locker.Write())
            {
                FillList(locker); // ReadWriteLocker supports implicit cast into the wrapped type
                Assert.IsTrue(locker.Lock.IsWriteLockHeld);
                Assert.IsFalse(locker.Lock.IsReadLockHeld);
            }
            Assert.IsFalse(locker.Lock.IsWriteLockHeld);
            Assert.IsFalse(locker.Lock.IsReadLockHeld);
            Assert.AreEqual(3, locker.Value.Count);
        }
        public void CreateRead()
        {
            var list = new List <int> {
                2, 4, 8
            };
            var locker = ReadWriteLocker.Create(list);

            using (locker.Read())
            {
                Assert.IsFalse(locker.Lock.IsWriteLockHeld);
                Assert.IsTrue(locker.Lock.IsReadLockHeld);
                CollectionAssert.AreEqual(new[] { 2, 4, 8 }, locker.Value);
            }
            Assert.IsFalse(locker.Lock.IsWriteLockHeld);
            Assert.IsFalse(locker.Lock.IsReadLockHeld);
        }