是",;锁;用C#的语句耗时吗?

是",;锁;用C#的语句耗时吗?,c#,locking,C#,Locking,我有一个方法,其他方法多次调用它来散列数据。在方法内部,使用了一些lock语句。请告诉我lock语句是否耗时,以及改进它的最佳方法是什么 p/S:我一直在寻找一种避免在这种方法中使用lock语句的方法。lock语句本身并不十分耗时,但它可能会导致对共享数据的争用 后续:如果需要保护共享数据,请使用锁。如图所示,无锁代码很难正确执行。您的问题无法回答。这完全取决于锁是否被争用 让我这么说吧:你在问“进入浴室需要很长时间吗?”而没有告诉我们已经有多少人排队使用它。如果没有人排队的话,一点也不长。如果

我有一个方法,其他方法多次调用它来散列数据。在方法内部,使用了一些lock语句。请告诉我lock语句是否耗时,以及改进它的最佳方法是什么


p/S:我一直在寻找一种避免在这种方法中使用lock语句的方法。

lock语句本身并不十分耗时,但它可能会导致对共享数据的争用


后续:如果需要保护共享数据,请使用锁。如图所示,无锁代码很难正确执行。

您的问题无法回答。这完全取决于锁是否被争用


让我这么说吧:你在问“进入浴室需要很长时间吗?”而没有告诉我们已经有多少人排队使用它。如果没有人排队的话,一点也不长。如果通常有二十个人等待进入,可能确实很长时间。

lock语句本身实际上是一些语法糖,用于创建和管理监视器对象


这本身通常不会过度占用资源,但如果您跨多个线程对变量进行多次读取但没有写入,则可能会成为一个问题。每次读取都必须等待另一次读取完成,然后才能完成读取。在您可能从多个线程获取变量但不设置变量的情况下,您可能希望查看如何使用对象来管理异步读写。

您可能会发现线程上的这一点非常有趣且相关。它的一个声明是“锁定本身非常快:假设没有阻塞,锁通常在几十纳秒内获得。”

我的情况是:-如果没有使用lock语句,我必须向方法传递一个参数。-锁很少在某些情况下生效。在大多数情况下,lock语句不是必需的。但是为了线程安全,我们必须添加lock语句。有什么建议吗?这引出了另一个问题:使用lock语句比将对象传递给方法更耗时吗?@markattwood:这里唯一能衡量硬件上代码性能的人就是你。尝试两种方法,仔细测量结果,然后你就会知道。我将使用lock语句而不是parameters monitor是一个静态类,不会创建任何实例。但是CLR分配了一个额外的同步块。