コード例 #1
0
        public static SingletonUsingLock GetInstance()
        {
            if (_unique == null)
            {
                _unique = new SingletonUsingLock();
            }

            lock (_unique) {
                return(_unique);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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));
        }