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

Multithreading 线程同步会降低多线程应用程序的速度,multithreading,synchronization,Multithreading,Synchronization,我有一个用c#编写的多线程应用程序。我注意到,使用lock(这个)方法实现线程同步会使应用程序的速度降低20%。这是一种预期的行为,还是我应该更仔细地研究实现?根据lock()语句的粗糙度或粒度,您确实可以影响MT应用程序的性能。只有你真正知道的东西才应该被锁定。任何同步都会降低多线程的速度 尽管如此,锁(这个)真的从来都不是个好主意。在可能的情况下,您应该始终锁定只用于同步的私有对象 确保将锁定时间减至最少,并尽可能短地保持锁定时间。这将有助于将“减速”降至最低。锁定确实会增加一些无法避免的开

我有一个用c#编写的多线程应用程序。我注意到,使用lock(这个)方法实现线程同步会使应用程序的速度降低20%。这是一种预期的行为,还是我应该更仔细地研究实现?

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

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

尽管如此,
锁(这个)
真的从来都不是个好主意。在可能的情况下,您应该始终锁定只用于同步的私有对象


确保将锁定时间减至最少,并尽可能短地保持锁定时间。这将有助于将“减速”降至最低。

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

但一般来说,如果不了解应用程序,就无法回答您的问题。20%的减速可能还可以,但您可能锁定范围太广,然后程序(通常)会变慢

另外,请不要使用锁(这个)。如果您的实例被传递,而其他人锁定了该引用,则会出现死锁。最佳做法是锁定其他人无法访问的私有对象。

您可以在Windows中监控应用程序在争夺锁定方面花费的时间