public static SingletonUsingLock GetInstance() { if (_unique == null) { _unique = new SingletonUsingLock(); } lock (_unique) { return(_unique); } }
public void ParallelTest_SingletonUsingLock() { int size = 10000; var numberExecutions = 0; Parallel.ForEach(Enumerable.Range(1, size), (i) => { SingletonUsingLock.GetInstance().RandomName = "Random number: " + i; var acessing = SingletonUsingLock.GetInstance().RandomName; Interlocked.Increment(ref numberExecutions); }); Assert.Equal(size, numberExecutions); }
public void SingletonUsingLockValidateConcept() { var a = SingletonUsingLock.GetInstance(); object r = null; Assert.Throws <NullReferenceException>(() => { r = a.GetType().GetConstructor(Type.EmptyTypes).Invoke(new object[] {}); }); if (r != null) { Assert.Equal(a, r); } }
public void CheckIfFromAllUsageIsTheSameObjectReference_SingletonUsingLock() { int size = 300; var r = new List <SingletonUsingLock>(); Parallel.ForEach(Enumerable.Range(1, size), (i) => { SingletonUsingLock.GetInstance().RandomName = "Random number: " + i; var acessing = SingletonUsingLock.GetInstance().RandomName; r.Add(SingletonUsingLock.GetInstance()); }); var firstItem = r.FirstOrDefault(); Assert.All(r, (item) => item.Equals(firstItem)); }