Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="obj"></param>
        internal static void Enter(Object obj)
        {
            MonitorEx monitor = get(obj);

            if (monitor == null)
            {
                monitor = add(obj);
            }

            monitor.Enter();
        }
Example #2
0
        private static readonly object _lockObject = new object(); // for a local monitor, to supervise monitor list access

        /// <summary>
        ///
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        private static MonitorEx add(Object value)
        {
            if (value == null)
            {
                throw new ArgumentNullException();
            }

            lock (_lockObject)
            {
                MonitorEx localMonitor;

                // verify monitor was not just added by another thread
                if (!_monitorTable.TryGetValue(value, out localMonitor))
                {
                    // Add the new monitor - create the new arrays, copy old data, assign to members and assign data
                    localMonitor = new MonitorEx();
                    _monitorTable.Add(value, localMonitor);
                }

                return(localMonitor);
            }
        }