C#线程.连接是否保证内存一致性



这个SO问题的第一个答案引用了Java语言规范,大意是Thread.Join和Thread.IsAlive在线程T1上从线程T2调用时,在T2检测到T1已终止时与T1同步。

我找不到任何可以与JLS相媲美的东西来回答这个问题:上面的问题对C#来说也是正确的吗?

如果是,它能保证记忆连贯性吗?也就是说,它是否保证T1对内存的所有写入对T2都可见?

来自MSDN杂志,几年前-理论与实践中的C#内存模型,由两部分组成。

它要说的是:

.NET Framework中的所有其他线程API,如Thread.Start和ThreadPool.QueueUserWorkItem,也提供了类似的保证。事实上,几乎每一个线程API都必须具有一些屏障语义才能正常工作这些几乎从未被记录在案,但通常可以简单地通过思考API有用的保证条件来推断。

(我的强调(

当然,我们实际寻求的是.NET内存模型的细节,而不是C#,因为它是运行时,可以提供任何保证,但如上所述,我找不到任何更具体的文档。

最新更新