C# Tips


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