/// <summary> /// Constructor of Monitor class /// </summary> /// <param name="context">Specify a context to have different contexts in different domains</param> /// <param name="name">Name of the new Monitor</param> public Monitor(Context.Monitor context, string name) : base(context) { ContextMapper = ctx => ctx ?? _defaultContext; if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out _currentObject)) { lock (ContextMapper.Invoke(context).LockerObject) { if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out _currentObject)) { _currentObject = new object(); ContextMapper.Invoke(context).ObjectDictionary.TryAdd(name, _currentObject); } } } }
/// <summary> /// Constructor of Semaphore class /// </summary> /// <param name="context">Specify a context to have different contexts in different domains</param> /// <param name="name">Name of the new Semaphore</param> /// <param name="initialCount">The initial number of requests for the semaphore that can be granted concurrently.</param> /// <param name="maximumCount">The maximum number of requests for the semaphore that can be granted concurrently.</param> public Semaphore(Context.Semaphore context, string name, int initialCount, int maximumCount) : base(context) { ContextMapper = ctx => ctx ?? _defaultContext; if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out var tempSemaphore)) { lock (ContextMapper.Invoke(context).LockerObject) { if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out tempSemaphore)) { _currentObject = new System.Threading.Semaphore(initialCount, maximumCount, name); ContextMapper.Invoke(context).ObjectDictionary.TryAdd(name, _currentObject); } } } if (tempSemaphore != null) { _currentObject = (System.Threading.Semaphore)tempSemaphore; } }
/// <summary> /// Constructor of AutoResetEvent class /// </summary> /// <param name="context">Specify a context to have different contexts in different domains</param> /// <param name="name">Name of the new AutoResetEvent</param> public AutoResetEvent(Context.AutoResetEvent context, string name) : base(context) { ContextMapper = ctx => ctx ?? _defaultContext; if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out var tempSemaphore)) { lock (ContextMapper.Invoke(context).LockerObject) { if (!ContextMapper.Invoke(context).ObjectDictionary.TryGetValue(name, out tempSemaphore)) { _currentObject = new System.Threading.AutoResetEvent(true); ContextMapper.Invoke(context).ObjectDictionary.TryAdd(name, _currentObject); } } } if (tempSemaphore != null) { _currentObject = (System.Threading.AutoResetEvent)tempSemaphore; } }