この問題に対処する方法が正確にはわかりません。私はそのように宣言されているミューテックスを持っています:
public class MyNamedLock
{
private Mutex mtx;
private string _strLkName;
public MyNamedLock(string strLockName)
{
_strLkName = strLockName;
//...
mtx = new Mutex(false, _strLkName, out bCreatedNew, mSec);
}
public bool enterLockWithTimeout(int nmsWait = 30 * 1000)
{
_nmsWaitLock = nmsWait;
//Wait
return mtx.WaitOne(nmsWait);
}
public void leaveLock()
{
_nmsWaitLock = 0;
//Release it
mtx.ReleaseMutex();
}
}
次に、ASP.NETページで次のように使用されます。
public class MyClass
{
private MyNamedLock gl;
public MyClass()
{
gl = new MyNamedLock("lock name");
}
public void funct()
{
try
{
//Enter lock
if (gl.enterLockWithTimeout())
{
//Do work
}
else
throw new Exception("Failed to enter lock");
}
finally
{
//Leave lock
gl.leaveLock();
}
}
}
このコードは、開発環境では問題を引き起こしませんが、本番環境では、次の例外がスローされることがあります。
オブジェクト同期メソッドは、同期されていないコードブロックから呼び出されました。
説明はやや曖昧ですが、トレースを実行するだけで、そのmtx.ReleaseMutex();
部分で例外が発生していることがわかりました。それはどういう意味で、どのように修正するのですか?