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()メソッドを使用して来ていることを意味します。プロセスはログの書き込みを完了し、最後に mutext オブジェクトを解放します。読み取り目的で ABC.xml ファイルを使用したい別のリーダー アプリケーションがあります。リーダー アプリケーションでミューテキスト オブジェクトを使用するにはどうすればよいですか?

4

2 に答える 2

2
  1. ここから SingleGlobalInstance クラスをコピーして貼り付けます: What is a good pattern for using a Global Mutex in 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 に答える