多线程系统是否会影响延迟计数的准确性

时间:2018-03-16 06:10:46

标签: c# windows

在Windows中(假设正在使用四核处理器),目前有4个高优先级线程并行运行。

我必须执行一个简单的应用程序,它只计算每X / 2 ms。在哪里' X'是ms用于线程上下文切换的最短时间。

在这种情况下,正在更新的计数将无法准确地告知已经过了多少X / 2毫秒。

是吗?

1 个答案:

答案 0 :(得分:1)

这里的问题是增加变量不是线程安全,你必须以某种方式锁定它,否则在不同的cpus上运行的线程将不断与最新的计数器值过时。< / p>

执行此操作的最佳方法是使用某种锁定机制,例如lock。然而,这将有一些开销,并不会给你真正的最大性能。

如果您想尽可能接近,请考虑使用lock更好的锁定机制,例如:

Interlocked.Increment(ref myNum);

Interlocked.Increment Method (Int32)

  

增加指定变量并将结果存储为原子   操作

Increment基本上变成了“总线锁定”声明。当调用 CPU 执行其操作时,此语句将锁定总线以防止另一个 CPU 访问总线

然而,最好查看所有Interlocked方法,以查看可用的各种原子操作并找到适合您需求的方法。当您想要执行更复杂的事情(如多个相互关联的增量/减量)或序列化对比整数更复杂的资源的访问时,请使用lock()