当前位置: 首页 > news >正文

.NET 的静态构造函数是否线程安全?答案是肯定的!

今天有小伙伴在评估某类线程安全问题的时候,怀疑到静态构造函数里面去了。于是就有了本文。


@TOC

静态构造函数的执行时机

根据官方文档 Static Constructors - C# Programming Guide 所述:

A static constructor is called automatically to initialize the class before the first instance is created or any static members are referenced. A static constructor will run before an instance constructor. A type's static constructor is called when a static method assigned to an event or a delegate is invoked and not when it is assigned. If static field variable initializers are present in the class of the static constructor, they will be executed in the textual order in which they appear in the class declaration immediately prior to the execution of the static constructor.

静态构造函数的线程安全


参考资料

  • Are static constructors thread-safe? · Issue #10243 · dotnet/docs
  • Classes - C# language specification - Microsoft Docs
  • static constructor and thred safety
  • Thread Safety In C#
  • multithreading - Is the C# static constructor thread safe? - Stack Overflow
  • Static Constructors - C# Programming Guide - Microsoft Docs

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 如何在终端和 PowerShell 中将一个命令自动重复执行多次
  • WPF:无法对元素“XXX”设置 Name 特性值“YYY”。“XXX”在元素“ZZZ”的范围内,在另一范围内定义它时,已注册了名称。
  • 一点点从坑里爬出来:如何正确打开 WPF 里的 Popup?
  • Windows Linux 系统中获取端口被哪个应用程序占用
  • 设置用户无需密码自动登录到 Windows 系统
  • 最简单的代码,让 WPF 支持响应式布局
  • 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
  • 如何给 GitHub Pages 配置多个域名?
  • 通过子类化窗口(SubClass)来为现有的某个窗口添加新的窗口处理程序(或者叫钩子,Hook)
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符
  • Linux Shell 中需要转义的字符
  • Unity3D 入门:Unity Editor 编辑器常用快捷键
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Babel配置的不完全指南
  • gf框架之分页模块(五) - 自定义分页
  • HTTP那些事
  • in typeof instanceof ===这些运算符有什么作用
  • Java 内存分配及垃圾回收机制初探
  • JavaScript标准库系列——Math对象和Date对象(二)
  • laravel5.5 视图共享数据
  • nfs客户端进程变D,延伸linux的lock
  • nodejs实现webservice问题总结
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • REST架构的思考
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue.js-Day01
  • vuex 学习笔记 01
  • 从零开始学习部署
  • 工作中总结前端开发流程--vue项目
  • 关于字符编码你应该知道的事情
  • 聚类分析——Kmeans
  • 蓝海存储开关机注意事项总结
  • 通过npm或yarn自动生成vue组件
  • 温故知新之javascript面向对象
  • 物联网链路协议
  • 学习笔记TF060:图像语音结合,看图说话
  • 最简单的无缝轮播
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​MySQL主从复制一致性检测
  • ​比特币大跌的 2 个原因
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (十) 初识 Docker file
  • (转)【Hibernate总结系列】使用举例
  • (转)linux下的时间函数使用
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .Net接口调试与案例
  • .NET框架