Lock(){...}等待时间

时间:2012-03-06 15:59:21

标签: c# .net multithreading

假设我们有MethodA和MethodB,其中整个方法的主体都在单个大锁块内。两种方法都使用相同的对象进行锁定:

lock (objectX) 
{ 
    // methodbody
}

有多个线程调用这两种方法。

两个问题:

  1. 是否可以测量总等待时间?包括:获取锁定的时间和“其他”方法的锁定块完成执行所需的时间。
  2. 在两个方法中在适当的位置引入锁而不是用单个锁封装整个方法体会更快吗?我意识到在这里我需要衡量两种解决方案的性能,但我想听听您的经验和建议

1 个答案:

答案 0 :(得分:3)

  

2)在适当的地方引入两种方法中的锁是否会更快

是。始终保持锁定的段尽可能短。锁定本身很便宜,当你做非关键的事情时,不要让别人等待。

  

1)是否可以测量总等待时间?包括:获取锁定的时间和“其他”方法的锁定块完成执行所需的时间。

这不是我想的。对于长时间的延伸,你可能会考虑CPU时间与经过的时间,但一般来说:使用一个好的分析器。