static void ZooKeeperReadWriteLockTest() { var rd = new Random(); for (int i = 0; i < 5; i++) { Task.Factory.StartNew(() => { var seed = rd.Next(1, 100); IDistributedLock zkLock = ((seed % 2) == 1) ? new ZooKeeperWriteLock(new ZooKeeperReadWriteLockOptions()) as IDistributedLock : new ZooKeeperReadLock(new ZooKeeperReadWriteLockOptions()) as IDistributedLock; using (zkLock) { if (zkLock.Lock()) { Thread.Sleep(1000); zkLock.UnLock(); Trace.WriteLine("UnLock"); } else { Trace.WriteLine("Get Lock Failed."); } } }); } }
public void Lock_then_modify_list() { IDistributedLock memcached = MemcachedCacheProvider.Default; var key = "DistributedLock1"; { var list = new List <int>(); var except = new Random().Next(100, 200); var stopwatch = Stopwatch.StartNew(); Parallel.For(0, except, i => { using (memcached.ReleasableLock(key)) { list.Add(i); } }); stopwatch.Stop(); Console.WriteLine("Handle {0} times cost {1}, {2:f2} per sec.", except, stopwatch.Elapsed.TotalSeconds, except / stopwatch.Elapsed.TotalSeconds); Assert.AreEqual(list.Count, except); } { var list = new List <int>(); var except = new Random().Next(1000, 2000); var stopwatch = Stopwatch.StartNew(); Parallel.For(0, except, i => { memcached.ReleasableLock(key); list.Add(i); memcached.UnLock(key); }); stopwatch.Stop(); Console.WriteLine("Handle {0} times cost {1}, {2:f2} per sec.", except, stopwatch.Elapsed.TotalSeconds, except / stopwatch.Elapsed.TotalSeconds); Assert.AreEqual(list.Count, except); } }
public void Dispose() { _redis.UnLock(_key); }