2010-04-27 103 views
0

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

回答

2

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

但是总的来说,如果没有关于应用程序的深入了解,就无法回答您的问题。 20%的放缓可能是确定的,但你可能锁定的太广泛,然后程序会(一般来说)变慢。

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

0

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

0

任何同步都会减慢多线程。

这就是说,lock(this)真的不是一个好主意。在可能的情况下,您应该始终锁定专用对象,只用于同步。

请务必将您的锁定保持在最低限度,并且只在最短的时间内保持锁定。这将有助于将“放缓”降到最低。