C#の排他 lockとMutex

Mutex

  • アンマネージドコード (Win32ラッパー) である。
  • マルチスレッドだけでなく、マルチプロセスでも排他出来る
  • C#(.Net Framework)以外の言語でも考え方を流用出来る。

lock

  • マネージドコードである。
  • マルチプロセスの排他は出来ない。
  • C#(.Net Framwork)独自の仕組みである(javaではsynchronizedという似た仕組みがある)。


Mutexを使った例

class MutexSample
{
  private static Mutex mx = new Mutex("MutexSample");
 
  // 排他制御したい関数
  public Test()
  {
    try
    {
      mx.WaiteOne();
 
      //
      // 実行したい処理
      //
    }
    finaly
    {
      mx.ReleaseMutex();
    }
  }
}


lockを使った例

class LockSample
{
  // lock用のダミーオブジェクト生成
  private static Object lockObj = new Object();
 
  // 排他制御したい関数
  public Test()
  {
    lock(lockObj)
    {
      //
      // 実行したい処理
      //
    }
  }
}

ネタ元