我该如何分配进程之间的互斥锁?(How can I Distribute the mutex loc

2019-09-27 16:59发布

我想实现不同进程之间的同步。 多进程调用ProcessLock应该是同步的。 我能实现它。 但这里的问题是,其他线程都不能进入临界区。 锁总是由同一个应用程序获得的。 我如何共享不同的应用程序之间的锁。

  public class ProcessLock : IDisposable
        {
            // the name of the global mutex;
            private const string MutexName = "FAA9569-7DFE-4D6D-874D-19123FB16CBC-8739827-[SystemSpecicString]";

            private Mutex _globalMutex;

            private bool _owned = false;

           // Synchronized constructor using mutex    
            public ProcessLock(TimeSpan timeToWait)
            {
                try
                {
                    _globalMutex = new Mutex(true, MutexName, out _owned);
                    if (_owned == false)
                    {
                        // did not get the mutex, wait for it.
                        _owned = _globalMutex.WaitOne(timeToWait);
                    }
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.Message);
                    throw;
                }
            }

            public void Dispose()
            {
                if (_owned)
                {   
                    //Releasing  the lock to be acquired by different processes.
                    _globalMutex.ReleaseMutex();
                }            
                _globalMutex = null;
            }
        }

如果三种方法调用此构造都应该按顺序调用或一些循环方式。

我有以下包装类

 public class CrossProcessLockFactory
    {
        private static int DefaultTimoutInMinutes = 2;
        public static IDisposable CreateCrossProcessLock()
        {
            return new ProcessLock(TimeSpan.FromMinutes(DefaultTimoutInMinutes));
        }

        public static IDisposable CreateCrossProcessLock(TimeSpan timespan)
        {
            return new ProcessLock(timespan);
        }
    }

而且里面主要方法。

 using (CrossProcessLockFactory.CreateCrossProcessLock())
            {
                // if we get out it is ready
                Console.WriteLine("Using the mutex on process 1. Press any key to release the mutex");
                Console.ReadLine();
            }
文章来源: How can I Distribute the mutex lock between processes?