public virtual void TestLock()
        {
            l.Lock();
            var latch = new CountdownEvent(1);

            Task.Factory.StartNew(() =>
            {
                if (!l.TryLock())
                {
                    latch.Signal();
                }
            });
            Assert.IsTrue(latch.Wait(TimeSpan.FromSeconds(5)));
            l.ForceUnlock();
        }
        public virtual void TestForceUnlock()
        {
            l.Lock();

            var latch = new CountdownEvent(1);

            var t2 = new Thread(delegate(object o)
            {
                try
                {
                    l.ForceUnlock();
                    latch.Signal();
                }
                catch
                {
                }
            });

            t2.Start();

            Assert.IsTrue(latch.Wait(TimeSpan.FromSeconds(100)));
            Assert.IsFalse(l.IsLocked());
        }