Beispiel #1
0
        public void ShouldEnterAndWaitAndAcqLockInSeparateThread()
        {
            var @ref = new LockRef();

            using (var @event = new Barrier(2))
            {
                var firstSuccess  = false;
                var secondSuccess = false;

                @ref.slimLock.Enter();

                ThreadPool.QueueUserWorkItem(x =>
                {
                    firstSuccess = [email protected]();

                    @event.SignalAndWait();
                    @event.SignalAndWait();

                    secondSuccess = @ref.slimLock.TryEnter();
                });

                @event.SignalAndWait();
                @ref.slimLock.Leave();
                @event.SignalAndWait();

                Assert.IsTrue(firstSuccess, "First thread blocked by first");
                Assert.IsTrue(secondSuccess, "Second thread blocked by first");
            }
        }
Beispiel #2
0
        public void ShouldFailToFreeInSeparateThread()
        {
            var @ref        = new LockRef();
            var manualEvent = new ManualResetEvent(false);
            var success     = false;

            @ref.slimLock.Enter();

            ThreadPool.QueueUserWorkItem(x =>
            {
                try
                {
                    @ref.slimLock.Leave();
                }
                catch
                {
                    success = true;
                }

                manualEvent.Set();
            });
            manualEvent.WaitOne();
            @ref.slimLock.Leave();

            Assert.IsTrue(success, "Should throw for locked in another thread");
        }
Beispiel #3
0
        public void ShouldEnterAndWaitInSeparateThread()
        {
            var @ref        = new LockRef();
            var manualEvent = new ManualResetEvent(false);
            var success     = false;

            @ref.slimLock.Enter();

            ThreadPool.QueueUserWorkItem(x =>
            {
                success = [email protected]();
                manualEvent.Set();
            });
            manualEvent.WaitOne();
            @ref.slimLock.Leave();

            Assert.IsTrue(success, "Shouldn't enter in separate thread");
        }