4

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

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

4

1 回答 1

5

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

据我所知,这并没有明确承诺。从 .NET 2.0 开始,Thread 和 ProcessThread 之间不再有直接对应关系。应 SQL Server 团队的要求,此链接已断开,该团队希望使用光纤实现线程。这实际上并没有发生,当他们无法使其足够可靠时,他们放弃了该项目。鉴于这个项目的结果,而且我所知道的主流项目都没有尝试再次利用这一点,以及实现不使用锁的线程支持的困难,我认为可以安全地假设您可以依靠隐式障碍。

于 2012-05-20T12:08:05.930 回答