静态类是否安全

时间:2011-04-30 06:13:49

标签: .net c#-4.0 thread-safety static-members

我已经通过msdn编写了所有静态类都是线程安全的。那篇文章适用于1.1版......

http://msdn.microsoft.com/en-us/library/d11h6832(v=vs.71).aspx

.NET Framework中的所有公共静态成员(方法,属性,字段和事件)都支持多线程环境中的并发访问。因此,可以从两个线程同时调用任何.NET Framework静态成员,而不会遇到竞争条件,死锁或崩溃。

2 个答案:

答案 0 :(得分:11)

不,它没有说静态类是线程安全的,它说公共静态成员是线程安全的。

对于静态方法,例如,这意味着它们仅使用您作为参数发送的数据,或者也是线程安全的其他静态成员。

您不必同步调用静态方法,除非需要保护您发送到方法中的数据。

答案 1 :(得分:11)

这就是说.NET Framework中的所有静态成员 都是以线程安全的方式设计的。这意味着Microsoft为.NET Framework开发的所有静态方法/字段/属性。如果您想使用.NET Framework本身提供的静态成员,那么您可以假设它是线程安全的并且可以使用它。我仍然会怀疑该陈述的有效性,并假设非线程安全,直到证明不是这样。

您编写的任何类(静态或非静态)您自己且具有静态成员的类可能是也可能不是线程安全的,具体取决于您编写它们的方式。它不会神奇地是线程安全的,因为它是一个静态的方法/类。

另外看看这个是为了理解什么是静态成员以及什么是静态类:

Static Classes and Static Members