我有一个方法,通过其他方法多次调用来散列数据。在方法内部,使用了一些锁定语句。能不能让我知道锁定声明是否耗时,改善它的最佳方法是什么。
P / S:我一直在寻找避免在此方法中使用lock语句的方法。
答案 0 :(得分:11)
您的问题无法回答。这完全取决于锁是否有争议。
让我这样说吧:你问“进入浴室需要很长时间吗?” 没有告诉我们有多少人已经排队使用它。如果没有人排队,那就不长。如果通常有二十人等待进入,也许确实很长。
答案 1 :(得分:6)
lock语句本身不是非常耗时,但可能会导致对共享数据的争用。
跟进:如果您需要保护共享数据,请使用锁定。正如this article所示,无锁代码难以正确执行。
答案 2 :(得分:1)
lock语句本身实际上是一些创建和管理Monitor对象的语法糖。
这本身通常不会过度消耗资源,但如果您有多个读取但没有跨多个线程写入变量,则可能会成为问题。每次读取都必须等待另一次读取才能完成读取。在您可能从多个线程获取变量但未设置变量的情况下,您可能希望查看使用ReaderWriterLockSlim对象来管理异步读取和写入。
答案 3 :(得分:1)
您可能会在有趣且相关的线程上找到此article。其中一个声称是“锁定本身非常快:锁定通常在数十纳秒内获得,假设没有阻塞。”