私はいくつかのコードをリファクタリングしていlock
て、インスタンスコンストラクターでの使用について疑問に思っています。
public class MyClass {
private static Int32 counter = 0;
private Int32 myCount;
public MyClass() {
lock(this) {
counter++;
myCount = counter;
}
}
}
確認してください
- インスタンスコンストラクタはスレッドセーフです。
- lockステートメントは、静的な「counter」メンバーではなく、そのコードブロックへのアクセスを防ぎます。
元のプログラマーの意図が各インスタンスにその「カウント」を認識させることであった場合、「カウンター」メンバーへのアクセスを同期して、別のスレッドが新しいスレッドではないことを確認し、MyClass
このスレッドがカウント?
参考までに-このクラスはシングルトンではありません。インスタンスは、単にその数を認識している必要があります。