私は次のような単純なクラスを持っています:
public class XXX
{
double val1;
double val2;
double delta;
public void SetValues(double v1, double v2)
{
val1 = v1;
val2 = v2;
delta = val1 - val2;
}
public double Val1 { get { return val1; } }
public double Val2 { get { return val2; } }
public double Delta { get { return delta; } }
}
、値を設定するための1つのスレッドと、値を読み取る複数のスレッド。したがってlock()
、すべての読み取りと書き込みを中断しないようにするために使用できます。しかし、同期が達成されることは決してないことを私は知っています。私があまり気にしないVal1 - Val2
のと同じではない可能性が常にあります。私の懸念は、ゲッターを介して安定した値を取得することです。ただし、ほとんどの場合、読者が作業するため、この状況ではコストがかかります。Delta
lock()
私の頭に浮かぶ次善の策は使用することですInterlocked.Exchange()
public void SetValues(double v1, double v2)
{
Interlocked.Exchange(ref val1, v1);
Interlocked.Exchange(ref val2, v2);
Interlocked.Exchange(ref delta, v1 - v2);
}
public double Val1 {
get
{
double val = 0;
Interlocked.Exchange(ref val, val1);
return val;
}
}
しかし、コードは私にはかなりばかげているようです。知らない。
それでlock()
意味がありますか?Interlocked.Exchange()
パフォーマンスを向上させるためにを使用する必要がありますか?または他に何ができますか?