锁定语句的代价有多大?

22 浏览
0 Comments

锁定语句的代价有多大?

我一直在尝试多线程和并行处理,我需要一个计数器来做一些基本的计数和速度分析。为了避免我的类的并发使用问题,我在类的私有变量上使用了锁语句:

private object mutex = new object();
public void Count(int amount)
{
 lock(mutex)
 {
  done += amount;
 }
}

但我想知道...锁变量的代价有多大?对性能有什么负面影响?

admin 更改状态以发布 2023年5月23日
0
0 Comments

技术上来说,这是不可能量化的,这主要取决于CPU内存写入缓冲区的状态以及预取器所收集的数据需要丢弃并重新读取的量,这两者都非常不确定。我使用150个CPU周期作为一个粗略的估计,以避免重大失望。

实用的答案是,相比你认为可以跳过锁定时调试代码的时间,这花费小多了。

要得到一个确定的数字,你必须进行测量。Visual Studio有一个漂亮的并发分析器可用作扩展。

0
0 Comments

这里有一篇讲解成本的文章。简短的答案是50纳秒。

0