线程是否开始具有隐式内存屏障?

时间:2012-05-20 10:05:07

标签: .net clr

即。当我启动一个新线程时,是否可以安全地读取在线程从新启动的线程开始之前初始化的任何变量?

UPD我为什么要问?因为一些开发人员认为它确实有,并且不使用任何明确的内存屏障。我无法重现该代码中的任何错误。但是,文档http://msdn.microsoft.com/en-us/library/ms686355(v=vs.85).aspx并未说明这是安全的。

1 个答案:

答案 0 :(得分:5)

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

我所知道的并没有明确承诺。从.NET 2.0开始,Thread和ProcessThread之间不再存在直接对应关系。在希望使用光纤实现Thread的SQL Server团队的请求下,此链接已被破坏。这实际上并没有发生,当他们无法使其足够可靠时,他们放弃了这个项目。鉴于这个项目的结果并没有我知道的主流项目曾经试图再次利用这一点,以及实现不使用锁的Thread支持的难度,我认为可以安全地假设你可以依靠隐含的障碍。

相关问题