Exemplo n.º 1
0
        public static SingletonBuildOnDeclarationAndVolatileUsingLock GetInstance()
        {
            if (_unique == null)
            {
                lock (_unique){
                    _unique = new SingletonBuildOnDeclarationAndVolatileUsingLock();
                }
            }

            return(_unique);
        }
Exemplo n.º 2
0
        public void ParallelTest_SingletonBuildOnDeclarationAndVolatileLock()
        {
            int size             = 10000;
            var numberExecutions = 0;

            Parallel.ForEach(Enumerable.Range(1, size), (i) =>
            {
                SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance().RandomName = "Random number: " + i;
                var acessing = SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance().RandomName;
                Interlocked.Increment(ref numberExecutions);
            });

            Assert.Equal(size, numberExecutions);
        }
Exemplo n.º 3
0
        public void SingletonBuildOnDeclarationAndVolatileUsingLock_ValidateConcept()
        {
            var    a = SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance();
            object r = null;

            Assert.Throws <NullReferenceException>(() => {
                r = a.GetType().GetConstructor(Type.EmptyTypes).Invoke(new object[] {});
            });

            if (r != null)
            {
                Assert.Equal(a, r);
            }
        }
Exemplo n.º 4
0
        public void CheckIfFromAllUsageIsTheSameObjectReference_SingletonBuildOnDeclarationAndVolatileUsingLock()
        {
            int size = 300;
            var r    = new List <SingletonBuildOnDeclarationAndVolatileUsingLock>();

            Parallel.ForEach(Enumerable.Range(1, size), (i) =>
            {
                SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance().RandomName = "Random number: " + i;
                var acessing = SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance().RandomName;
                r.Add(SingletonBuildOnDeclarationAndVolatileUsingLock.GetInstance());
            });
            var firstItem = r.FirstOrDefault();

            Assert.All(r, (item) => item.Equals(firstItem));
        }