lockが解放されなくなってしまうケース lockが解放されなくなってしまうことがあります。
原因はfinallyが実行されない例外が存在するためです。
基本的な回避策は、lockステートメントの中には必ずtry-catchを書くことです。
//-----------------------------------------------
//lockが解放されない??
lock(this)
{
Method(); //ここでスタックオーバーフローが起きると、lockが解放されない。
}
lock(this)
{
Console.WriteLine("Lock Released");
}
//スタックオーバーフローを引き起こす
private void Method()
{
Method();
}
//-----------------------------------------------
//より安全なコード
lock(this)
{
try
{
Method(); //catchで処理され、ロックは解放される
}
catch //finallyではなくcatchを書くことで例外を処理
{
}
}
目次に戻る
| Copyright(c) 2008 WoodenSoldier Software |
|