public void RowSynchronizesEndRangeRowLocks() { int threadId = Thread.CurrentThread.ManagedThreadId; bool exceptionThrown = false; var sync = new RowSynchronizer<int>(new BinConverter32()); using (var lock1 = sync.Lock(new Range<int>(10, 20))) { Parallel.For(1, 4, delegate(int i) { try { if (Thread.CurrentThread.ManagedThreadId != threadId) using (var lock2 = sync.Lock(new Range<int>(12, 22), 100)) { exceptionThrown ^= false; } else Thread.Sleep(100); } catch (RowLockTimeoutException) { exceptionThrown = true; } }); } Assert.IsTrue(exceptionThrown); }
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); }
public void RowSynchronizesSingleRowTryLockReturnsFalse() { int threadId = Thread.CurrentThread.ManagedThreadId; bool exceptionThrown = false; var sync = new RowSynchronizer<int>(new BinConverter32()); RowLock<int> rowLock; using (var lock1 = sync.Lock(new Range<int>(10, 20))) { Parallel.For(1, 4, delegate(int i) { try { if (Thread.CurrentThread.ManagedThreadId != threadId) Assert.IsFalse(sync.TryLock(15, 100, out rowLock)); else Thread.Sleep(100); } catch (RowLockTimeoutException) { exceptionThrown = true; } }); } Assert.IsFalse(exceptionThrown); }
public void RowSynchronizesSameThreadBypassesLock() { var sync = new RowSynchronizer<int>(new BinConverter32()); using (var lock1 = sync.Lock(10)) { Assert.IsNotNull(lock1); using (var lock2 = sync.Lock(10, 100)) { } Assert.IsTrue(sync.HasLocks()); } Assert.IsFalse(sync.HasLocks()); }