c# - C# Thread.Join 是否保证内存一致性?
问题描述
这个 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#,因为它是运行时可以提供任何保证,但正如上面所建议的,我找不到任何更具体的文档。
推荐阅读
- r - 使用 R Separate_Rows 不适用于“|”
- c# - 在同一 Visual Studio 表单中而不是在新窗口中打开链接 (C#)
- r - 在 R 中为分类/连续变量操作 ggplor2
- python - 推送拒绝了 Heroku Python Flask 要求失败 exiv2==0.3.1
- computer-vision - HALCON min_mas_grey()
- swift - 带有“App Scene WindowGroup”的白色状态栏
- javascript - 按下提交后如何记录引导下拉菜单的值?
- python - 从 Plex 的“最近添加”部分中删除视频
- docker - 在 Docker 中将 Node-Red 连接到 Mariadb
- machine-learning - 如何使用 PyTorch 计算 Monte Carlo Dropout 神经网络的不确定性?