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) { // // 実行したい処理 // } } }
ネタ元