【问题标题】:Multi-threading: What happens if you run 2 processes e.g. (x=1, x=2) (x=x++) simultaneously? [closed]多线程:如果你运行 2 个进程会发生什么,例如(x=1, x=2) (x=x++) 同时? [关闭]
【发布时间】:2025-12-27 01:00:05
【问题描述】:

如果同时运行两个进程x=1x=2x=x++,会发生什么?

【问题讨论】:

  • 没人知道,行为未定义
  • 进程还是线程?如果是线程,则完全取决于您如何编写代码。
  • 如果你问当多个线程试图修改同一个值时会发生什么,那么你所说的就是竞争条件。
  • @Tia:单独的进程不共享内存中的变量。我认为您严重误解了一些基本概念,导致您对此事感到困惑。您是否有可以分享的行为异常的具体代码示例?
  • @David,事实上,说两个事件在计算机硬件中同时发生是有道理的,因为当我们推理并行计算时,只有重要的事件是对共享变量的更新。计算机的内存系统总是将更新序列化到任何给定的物理内存位置。

标签: java multithreading


【解决方案1】:

基于何时执行的 6 种可能性中的任何一种。 6 种可能性,因为有阶乘 (3) 种可能性。

例如你的代码被执行的顺序可以是

1. x = 1
2. x++
3. x = 2

结果将是 x = 2

或者它可能是

1. x = 1
2. x = 2
3. x++

结果将是 x = 3。 (我假设你的进程总是在 x = 2 之前执行 x = 1 因为你写它们的顺序)

请注意,如果x++ 在任何其他之前执行,则可能会导致基于x 的初始化的未定义行为。 列出所有 6 种可能性,看看你的代码可以达到什么状态,这应该有助于澄清。

您可能想查看 Lamport 的时钟和顺序一致性。

【讨论】:

  • 感谢您的帮助 ritratt!
  • java 中没有未定义的行为。在这种情况下,这是因为即使存在竞争条件,变量也始终初始化为零。第二个 x++ 不是原子的,因此还有更多选项,但由于 x=1 不能在 x=2 之后执行(如果您假设 x++ 是原子的,则只有三个选项)
最近更新 更多