.net线程安全

7 .net thread-safety

为什么锁定一种被认为非常糟糕的类型?例如,lock(typeof(DateTime))我理解.net中任何类的静态方法都被认为是线程安全的,而实例成员则不是.因此,在使用DateTime时无需锁定它.我正在阅读的这本书没有解释为什么它只是说它是坏的.任何解释都会很棒.

Jef*_*nal 9

CLR为每个AppDomain维护每种类型的单个实例(正如Joe在他的回答中指出的那样,有时它们甚至在更广泛的上下文中共享).

由于您无法控制对类型的访问,因此您可能会发现自己无意中阻止或被完全不相关的代码阻止,这些代码也会锁定您的类型.

相反,您通常应该锁定与要锁定的操作(或相关操作)位于同一类中的私有实例,以便您可以控制锁影响和阻塞的内容.(虽然也有一些情况下锁定一些众所周知的同步对象是有意义的,这些对象旨在跨不同的对象使用.)