线程同步会降低多线程应用程序的速度

时间:2010-04-27 17:07:19

标签: multithreading synchronization

我有一个用c#编写的多线程应用程序。我注意到,使用lock(this)方法实现线程同步会使应用程序减慢20%。这是预期的行为还是我应该更接近实施?

4 个答案:

答案 0 :(得分:2)

锁定会增加一些开销,这是无法避免的。现在你的一些线程很可能会等待释放资源,而不是只是在他们想要的时候抓住它们。如果你正确地实现了线程同步,那么这是一件好事。

但总的来说,如果没有关于申请的深入了解,你的问题就无法回答。 20%的减速可能没问题,但你的锁定可能过于宽泛,然后程序会(通常)变慢。

另外,请不要使用锁(这个)。如果您的实例被传递并且其他人锁定了引用,那么您将遇到死锁。最佳做法是锁定其他人无法访问的私有对象。

答案 1 :(得分:0)

根据lock()语句的粗略或粒度,您确实可以影响MT应用程序的性能。只锁定你真正知道应该被锁定的东西。

答案 2 :(得分:0)

任何同步都会降低多线程的速度。

话虽如此,lock(this)真的不是一个好主意。除非可能,否则应始终锁定用于除了同步之外的私有对象。

确保将锁定保持在最低限度,并且只能在尽可能短的时间内保持锁定。这将有助于将“减速”降至最低。

答案 3 :(得分:0)

您可以在Windows中监视performance counters以查看应用程序花费多少时间争夺锁定。