Статические классы безопасны для потоков - PullRequest
14 голосов
/ 30 апреля 2011

Я прошел через msdn, где написано, что все статические классы являются потокобезопасными.Хорошо, эта статья предназначена для версии 1.1 ...

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

Все открытые статические члены (методы, свойства, поля и события) в .NET Framework поддерживают одновременный доступ вмногопоточная среда.Следовательно, любой статический член .NET Framework может быть вызван одновременно из двух потоков без возникновения условий гонки, взаимоблокировок или сбоев.

Ответы [ 2 ]

11 голосов
/ 30 апреля 2011

Что это говорит о том, что все статические элементы в .NET Framework спроектированы безопасным для потоков способом.Это означает, что все статические методы / поля / свойства, разработанные Microsoft для .NET Framework.Если вы хотите использовать статический член, предоставляемый самой .NET Framework, то вы можете предположить, что он является потокобезопасным, и использовать его как таковой.Тем не менее, я все еще с подозрением относился бы к достоверности этого утверждения и предполагал бы, что безопасность не в потоке, пока не доказано обратное.

Любые классы, которые вы пишете (статические или нет) сами и которые имеютстатические члены могут или не могут быть потокобезопасными в зависимости от того, как вы их пишете.Он не будет магически безопасным для потоков только потому, что это статический метод / класс.

Также взгляните на это, чтобы понять, что такое статические члены и что такое статические классы:

Статические классы и статические члены

11 голосов
/ 30 апреля 2011

Нет, это не говорит о том, что статические классы являются потокобезопасными, оно говорит, что открытые статические члены являются потокобезопасными.

Например, для статических методов это означает, что они используют только данные, которые вы отправляетев качестве параметров или других статических членов, которые также являются потокобезопасными.

Вам не нужно синхронизировать вызовы статических методов, если только это не требуется для защиты данных, которые вы отправляете в метод.

...