**This is Writer Application**
public class LogWritter
{
Mutex mutx = new Mutex(false, @"Global\MySharedLog");
mutx.WaitOne();
try
{
xmlDoc.Load(_logFilePath);
///Write Log Code
xmlDoc.Save(_logFilePath);
}
finally
{
mutx.ReleaseMutex();
}
}
这是Reader Application
public class LogReader
{
Load(logFilePath);
//Reader code
}
我正在编写ABC.XML文件中的日志。这个XML文件可以由多个进程共享,这就是为什么我使用Mutex
对象进行锁定的意思,如果一个进程正在编写日志,那么同时另一个进程是使用Mutex.Waitone()
方法在第一个进程完成写入日志并最终释放mutext对象时等待传入进程。
我有另一个Reader应用程序,我想使用ABC.xml文件阅读目的如何在Reader应用程序中使用mutext对象?
答案 0 :(得分:2)
从此处复制/粘贴SingleGlobalInstance类:What is a good pattern for using a Global Mutex in C#?
将您的代码更改为:
// writer app
public class LogWritter
{
using (new SingleGlobalInstance(-1))
{
xmlDoc.Load(_logFilePath);
//Write Log Code
xmlDoc.Save(_logFilePath);
}
}
// reader app
public class LogReader
{
using (new SingleGlobalInstance(-1))
{
Load(logFilePath);
}
//Reader code
}
答案 1 :(得分:1)
您希望这是静态的,这样有人就不会意外地创建一个新实例并获得不同的互斥锁。
public static class FileMutexes
{
private static System.Collections.Generic.Dictionary<string, System.Threading.Mutex> mutexesInUse = new System.Collections.Generic.Dictionary<string, System.Threading.Mutex>();
public static System.Threading.Mutex GetMutexForFile(string fileName)
{
if (!mutexesInUse.ContainsKey(fileName))
mutexesInUse[fileName] = new System.Threading.Mutex();
return mutexesInUse[fileName];
}
}