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

标签 c# .net multithreading xamarin.android

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

旧例子:

  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/

相关文章:

c# - 在 MVVM 中绑定(bind)时出现 WPF 线程绑定(bind)访问错误

c# - 从字符串中删除定义的部分

c# - 我们可以在 ASP.Net 中使用大数据概念吗

c# - FormView.DataItem 在回发时为 null

.net - System.Data.SQLite 与 Microsoft.Data.Sqlite

java线程: Thread.中断()不工作

c# - 创建日志文件C#

c# - 如何在 Datagridview C# 中为特定列设置列标题文本

.net - 如何检索 .net 中泛型 IEnumerable 中使用的泛型类型?

java - Elastic Beanstalk 上的 Tomcat - Tomcat 线程内的多线程