私はこのようなミューテックスを使用しているアプリケーション(私はこれを書いていない)があります。C#のミューテックスクラスを使用してのこの代替方法のいずれかの損失がありますか?
static void Main(string[] args)
{
Mutex mutex = null;
try
{
mutex = Mutex.OpenExisting("SINGLEINSTANCE");
if (mutex != null)
{
return;
}
}
catch (WaitHandleCannotBeOpenedException ex)
{
mutex = new Mutex(true, "SINGLEINSTANCE");
}
// critical section here
}
をしかし、私は正しい方法でこのことを知っている:これが原因でのみ使用され
private readonly Mutex m = new Mutex("SINGLEINSTANCE");
static void Main(string[] args) {
m.WaitOne();
try {
/* critical code */
}
finally {
m.ReleaseMutex();
}
}
このアプリケーションの1つのプロセスを同時に実行できます。これは、Webアプリケーション用の非同期ジョブを実行するコンソールアプリケーションです。
このコードは生産されて、私はこのコードのいくつかの大きな問題がない限り、それを変更したくない...ありますか?
生産中で壊れていない場合は、なぜそれを変更または修正したいのですか? – CodingYoshi
あなたの「正しい方法」は、異なる動作をします。ミューテックスが存在する場合、古い方法は、ミューテックスが自由であるためには、あなたの新しい道はただ待って、プログラムを終了します。しかし、古い方法はまだ競争状態を持っています。また、ミューテックスのコンストラクタは 'PARAMTERとしてbool'取り、その上の真または偽の値が大幅にあなたのコードは、このユースケースのために働くだろう方法に影響を与えBOOL。 –