2 つのプロパティと 2 つのメソッドを持つクラスがあります。たとえば下のようなものです。(データ型または戻り値の型は無視してください。これは典型的なシナリオです)
// The methods could be invoked by multiple threads
public class Stock
{
private static int FaceValue {get; set;}
private static int Percent (get; set;}
// method that updates the two properties
Public void UpdateStock()
{
FaceValue += 1;
Percent = FaceValue * 100;
}
// method that reads the two properties
public int[] GetStockQuote()
{
return new int[] { FaceValue, Percent};
}
}
このクラスがスレッドセーフであることを確認する必要があります。両方のメソッドで lock(obj) をスレッドセーフにするための 1 つの手法として使用できますが、次の点を考慮すると、スレッドセーフにするための最良の手法は何でしょうか。
読み取り/更新されるプロパティは 2 つだけです。したがって、メソッド内でロックすることが適切な手法であるかどうかはわかりません。
メソッドやクラスではなく、プロパティをスレッドセーフにするだけで十分でしょうか?
また、個々のメソッドやプロパティではなく、クラス全体をスレッドセーフにする方法はありますか? .Net 4.0 から推奨されるロック手法はありますか?
私がこの権利を考えているのか、それともこれらを考慮して複雑にしすぎているのか疑問に思っています. これを明確にするために、事前に感謝します。
マニ