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