我想实现不同进程之间的同步。 多进程调用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();
}