2010-04-27 129 views
0

我有用c#編寫的多線程應用程序。我注意到使用lock(this)方法實現線程同步會使應用程序減慢20%。這是一種預期的行爲,還是我應該仔細觀察實施?同步線程減慢多線程應用程序

回答

2

鎖定確實會增加一些開銷,這是無法避免的。現在你的一些線程很可能會等待資源被釋放,而不僅僅是當他們想要的時候抓住它們。如果你正確地實現了線程同步,那麼這是一件好事。

但是總的來說,如果沒有關於應用程序的深入瞭解,就無法回答您的問題。 20%的放緩可能是確定的,但你可能鎖定的太廣泛,然後程序會(一般來說)變慢。

此外,請不要使用鎖(此)。如果您的實例被傳遞並且其他人鎖定了引用,那麼您將會遇到死鎖。最佳做法是鎖定其他人無法訪問的私人對象。

0

取決於lock()語句的粗糙程度或粒度,您確實可以影響MT應用程序的性能。只鎖定你真正知道的東西應該被鎖定。

0

任何同步都會減慢多線程。

這就是說,lock(this)真的不是一個好主意。在可能的情況下,您應該始終鎖定專用對象,只用於同步。

請務必將您的鎖定保持在最低限度,並且只在最短的時間內保持鎖定。這將有助於將「放緩」降到最低。