public void OneManyLock() { Int32 x = 0; Assert.DoesNotThrow(delegate { using (var oml = new OneManyLock()) { oml.Enter(true); x++; oml.Leave(true); for (Int32 i = 0; i < c_iterations; i++) { oml.Enter(true); x++; oml.Leave(true); } } }); }
public void OneManyLockIsFasterThanReaderWriterLockSlim() { // OneManyLock. var sw = Stopwatch.StartNew(); using (var oml = new OneManyLock()) { oml.Enter(true); M(); oml.Leave(true); for (Int32 i = 0; i < c_iterations; i++) { oml.Enter(true); M(); oml.Leave(true); } } Int64 omlElapsedMilliseconds = sw.ElapsedMilliseconds; // ReaderWriterLockSlim. sw.Restart(); using (var rwls = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion)) { rwls.EnterReadLock(); M(); rwls.ExitReadLock(); for (Int32 i = 0; i < c_iterations; i++) { rwls.EnterReadLock(); M(); rwls.ExitReadLock(); } } Int64 rwlsElapsedMilliseconds = sw.ElapsedMilliseconds; Assert.True(omlElapsedMilliseconds < rwlsElapsedMilliseconds); }