.net 线程开始是否有内隐记忆障碍?

.net 线程开始是否有内隐记忆障碍?,.net,clr,.net,Clr,i、 当我启动一个新线程时,从新启动的线程读取线程启动前初始化的任何变量是否安全 UPD我为什么要问?因为一些开发人员假设它确实有,并且没有使用任何显式内存障碍。我无法在代码中重现任何错误。然而,文档并没有说这是安全的。是的,操作系统提供了隐式屏障。如果不使用保护线程调度程序数据结构的内部锁,它无法启动线程 据我所知,并没有明确承诺。自.NET2.0以来,线程和ProcessThread之间不再存在直接对应关系。此链接是在希望使用光纤实现线程的SQL Server团队的请求下断开的。事实上,这并

i、 当我启动一个新线程时,从新启动的线程读取线程启动前初始化的任何变量是否安全


UPD我为什么要问?因为一些开发人员假设它确实有,并且没有使用任何显式内存障碍。我无法在代码中重现任何错误。然而,文档并没有说这是安全的。

是的,操作系统提供了隐式屏障。如果不使用保护线程调度程序数据结构的内部锁,它无法启动线程


据我所知,并没有明确承诺。自.NET2.0以来,线程和ProcessThread之间不再存在直接对应关系。此链接是在希望使用光纤实现线程的SQL Server团队的请求下断开的。事实上,这并没有发生,当他们无法使项目足够可靠时,他们放弃了该项目。考虑到这个项目的结果,而且据我所知,没有一个主流项目试图再次利用它,以及实现不使用锁的线程支持的困难,我认为可以安全地假设您可以依赖隐式屏障。

新线程启动没有什么特别之处。您需要采取与已执行线程相同的预防措施。请注意,您的链接讨论的是本机代码,而不是托管代码。