MSDN ドキュメントおよびクラスの使用例の多くでReaderWriterLockSlim
は、次のパターンの使用が推奨されています。
cacheLock.EnterWriteLock();
try
{
//Do something
}
finally
{
cacheLock.ExitWriteLock();
}
しかし、それが完全に安全かどうかは気になります。ロックが取得された後、try
ステートメントの前に何らかの例外が発生して、ロックがロックされた状態でスタックする可能性はありますか? 最も明白な候補はThreadAbortException
です。この状況の可能性は非常に小さいことは理解していますが、結果は非常に悪いので、検討する価値があると思います. try
コンパイラがこのパターンを理解し、プロセッサがステートメントの前にスレッドを中断するのを防いでいるとは思えません。
このコードが安全ではないという理論的な可能性がある場合、より安全にする方法はありますか?