我觉得;锁定“;语句不';不需要对象预兆:它会锁定代码,对吧

本文关键字:锁定 预兆 代码 对吧 对象 语句 不需要 | 更新日期: 2023-09-27 17:59:49

我有一个关于C#中"lock"语句的问题
MDSN(https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)表示

lock关键字确保一个线程不会进入关键部分,而另一个线程处于关键部分。如果另一个线程试图输入锁定的代码,它将等待、阻止,直到对象被释放。

虽然我觉得,只要"锁"阻止多个线程执行一个代码块,那么有一个"锁"点就足够了。这就像设置一个条件执行点。如果.net知道一个线程在"锁"块内,那么其他线程应该等待。这可以完全由.net框架本身来处理。但是,我们为什么要指定要锁定的对象呢?这对我来说似乎是多余的。

我觉得;锁定“;语句不';不需要对象预兆:它会锁定代码,对吧

锁定一个对象,为任何特定的关键代码段提供唯一的引用。如果多个线程正在争夺特定的代码段,那么任何类型的锁定(互斥/信号量等)都可能代价高昂。你不想要一个"通用"锁,因为需要锁定的所有东西都必须争夺同一个锁,即使线程没有共享公共上下文。您应该锁定尽可能小的代码部分以避免出现问题。您还应该进行性能测试。启动四个线程,所有线程都有一个围绕一行锁定的紧密循环(以保护公共上下文/变量),其性能将比非线程代码差得多。

如果有多个线程使用不同的代码处理给定的对象,那么您提出的"锁定块"仍然可能损坏。