コード例 #1
0
        public void RowSynchronizesLockAll()
        {
            int threadId = Thread.CurrentThread.ManagedThreadId;
            bool exceptionThrown = true;

            var sync = new RowSynchronizer<int>(new BinConverter32());

            using (var lock1 = sync.LockAll())
            {
                Parallel.For(1, 12, delegate(int i)
                {
                    try
                    {
                        if (Thread.CurrentThread.ManagedThreadId != threadId)
                            using (var lock2 = sync.Lock(random.Next(), 100))
                                exceptionThrown = false;
                    }
                    catch (RowLockTimeoutException) { exceptionThrown &= true; }
                });
            }

            Assert.IsTrue(exceptionThrown);
        }
コード例 #2
0
        public void RowSynchronizesTryLockAllWillReturnFalse()
        {
            int threadId = Thread.CurrentThread.ManagedThreadId;
            bool exceptionThrown = true;

            var sync = new RowSynchronizer<int>(new BinConverter32());
            RowLock<int> rowLock;

            using (var lock1 = sync.LockAll())
            {
                Parallel.For(1, 12, delegate(int i)
                {
                    try
                    {
                        if (Thread.CurrentThread.ManagedThreadId != threadId)
                            Assert.IsFalse(sync.TryLockAll(500, out rowLock));
                    }
                    catch (RowLockTimeoutException) { exceptionThrown &= true; }
                });

                Assert.IsTrue(exceptionThrown);
            }
        }