gpt4 book ai didi

c# - 多线程中的数学类给出错误

转载 作者:行者123 更新时间:2023-11-30 20:05:15 25 4
gpt4 key购买 nike

我在多线程中使用这样的代码:

旧例子:

  class All
{
object lockAll = new object();
public All ()
{
lock(lockAll)
{
double res= Magnitude(1d, 0.1d , 0.2d);
}
}
private double Magnitude(double X, double Y, double Z)
{
return Math.Sqrt(X * X + Y * Y + Z * Z);
}
}

但我看到有时 res 是 1.3 * 10 ^-314。为什么???全部锁定。:部分真实代码:

class PointSensors : IDisposable
{
object lockAcs = new object(); //Can it be non static? I think yes
object lockMag = new object();
// When i got info from sensors. Multitheading method called many times every time in new thread
public void OnSensorChanged(SensorEvent ev)
{
Sensor curS = ev.Sensor;
long timeStamp = ev.Timestamp;
// Vector from sensors
Vector3 vector = new Vector3(ev.Values[0], ev.Values[1], ev.Values[2]);
if (curS.Type == SensorType.Accelerometer)
{
lock (lockAcs)
{
double TotalAcseleration = vector.Magnitude - 9.8d;
...
}
}

if (curS.Type == SensorType.MagneticField))
{
lock (lockMag)
{
double TotalMagVect = vector.Magnitude ;
...
}
}


}
}

有时数学函数会给出疯狂的结果。

最佳答案

你的锁没有意义,因为 res 不是共享变量。它的作用域只存在于锁中,因此其他线程无论如何都无法访问它。

关于c# - 多线程中的数学类给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11723923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com