別のスレッドで実行されるシリアルリンクを介してキャプチャされる一連のリアルタイム値を持つコードを継承しました。
class Data
{
public static int nFooCount;
public static decimal meanValue;
// Lots more of a variety of types.
}
スレッドは、ロックやその他の同期なしで、データをフィールドに格納するだけです。私には、競合状態の海全体のように見えます。だから私はそれにいくつかの安全性を追加したいと思います。問題は、何が最善かということです。
intフィールドを揮発性にすることができます。ただし、10進数タイプではそれを行うことはできません。インターロックは、ボクシングを使用して、厄介ではありますが、それを助けることができます。または、ロックオブジェクトを追加することもできます
private static readonly object lockObj = new object();
そして、すべてをアクセサします。ただし、一度に1つしか変更しない場合でも、これによりすべてのフィールドがロックされます。プリミティブをロックすることはできません。とにかくそれは悪い形であり、すべてのフィールドにロックオブジェクトを追加するのは無駄に見えます。それで、より良い方法はありますか?