1
 **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();
            }
          }

这是阅读器应用程序

  public class LogReader
         { 
             Load(logFilePath);
              //Reader code    
         }

我正在 ABC.XML 文件中写入日志。该 XML 文件可以由多个进程共享,这就是为什么我使用Mutex对象来锁定目的意味着如果一个进程正在写入日志,那么同时另一个进程正在使用Mutex.Waitone()方法等待传入进程,而第一个进程在finally中完成写入日志并释放mutext对象。我有另一个阅读器应用程序,我想在其中使用 ABC.xml 文件进行阅读我如何在阅读器应用程序中使用 mutext 对象?

4

2 回答 2

2
  1. 从此处复制/粘贴 SingleGlobalInstance 类:在 C# 中使用全局互斥体的好模式是什么?

  2. 将您的代码更改为:

      // 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    
     }
    
于 2013-02-02T04:58:17.073 回答
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];
    }
}
于 2013-01-24T13:32:57.680 回答