语言规范中专门用于Java (链接)的部分经常提到“执行跟踪”。
例如,从一开始:
内存模型描述了给定程序和该程序的执行跟踪,执行跟踪是否是程序的合法执行。Java语言内存模型的工作方式是检查执行跟踪中的每个读取,并根据特定规则检查该读取所观察到的写入是否有效。
但我找不到这个词的任何描述/定义。
那么,根据JMM,什么是“执行跟踪”,它到底由什么组成?
最欢迎在语言规范文本中引用特定的地方。
发布于 2022-07-18 19:15:12
这不是一个完整的答案,但我认为这是值得一提的.
即使我们不知道“执行跟踪”在细节上是什么,我们也可以推断出它应该提供哪些信息。
让我们读一下17.4.记忆模型的第一段
内存模型描述了给定的程序和该程序的执行跟踪,该执行跟踪是否是程序的合法执行。Java编程语言内存模型的工作方式是检查执行跟踪中的每个读,并根据一定的规则检查该读所观察到的写入是否有效。
这意味着“程序”(即源代码)和“执行跟踪”应该提供确定程序执行是否合法所需的所有信息。
这些信息用17.4.6.处决来描述。
我不会把它复制粘贴在这里,因为太长了。
我试着用简单的话来解释它:
线间动作种类:
- `read/write`
- `volatile read/write`
- `lock/unlock`
- various special and synthetic actions (e.g. thread start/stop, etc.)- for every action it should store: - thread id
- action kind
- what expression in the source code it corresponds to
- for `write` and `volatile write`: the written value
- for `read` and `volatile read`: the `write` action, which provided the value
- for `lock/unlock`: the monitor being locked/unlocked
- various relations with other actions (e.g. position in a so-called synchronization order for synchronization actions)https://stackoverflow.com/questions/73021540
复制相似问题