Say I have this class, I'm copying/pasting from Visual Studio:


    class StaticObject_VariableHolder

    {

        private static object _sharedVariable;

        private static object _syncRoot = new object();



        private StaticObject_VariableHolder()

        {

        }



        public static object SharedVariable

        {

            get

            {

                if (_sharedVariable == null)

                {

                    lock (_syncRoot)

                    {

                        if (_sharedVariable == null)

                        {

                            _sharedVariable = new object();

                        }

                    }

                }



                return _sharedVariable;

            }

        }



        private static string ThreadId { get { return
Thread.CurrentThread.ManagedThreadId.ToString(); } }

    }


And I read this article,
http://msdn.microsoft.com/msdnmag/issues/05/08/Concurrency/



Is the following equivalent as above in regards to a one-time initialization
of a shared variable that is publicly (statically) accessible:



    /// <summary>

    /// From http://msdn.microsoft.com/msdnmag/issues/05/08/Concurrency/

    /// on "What Memory Needs Lock Protection"

    /// "Second; memory that is read-only after publication does not need a
lock

    /// because any invariants associated with it must hold for the program

    /// (since the value does not change).

    /// </summary>

    /// <typeparam name="T"></typeparam>

    class BaseProvider<T>

    {

        private static readonly T _sharedObject;



        public static T SharedObject { get { return _sharedObject; } }



        static BaseProvider()

        {

            _sharedObject = default(T);

        }

    }



It's not that we need BaseProvider to be singleton - although it could be -
but just access to it's shared variable.



Ron


===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to