Java Martin Odersky';中Scala编译器早期实现中的可重入性和静态数据;让我们谈谈。它们有什么关系?

Java Martin Odersky';中Scala编译器早期实现中的可重入性和静态数据;让我们谈谈。它们有什么关系?,java,scala,concurrency,compilation,reentrancy,Java,Scala,Concurrency,Compilation,Reentrancy,在马丁·奥德斯基的演讲中:,49岁。当他谈到一个问题时,由于静态数据,“编译器不能重新进入” 我对Java中的术语“可重入性”有一个基本的理解(如果我递归调用一个同步方法,那么我就不会陷入死锁),但我仍然不明白Martin在说什么 如果代码是按照演讲的第49分钟所示编写的,为什么不可能在同一个JVM中运行两个编译器呢 他说的是什么样的回归 我想当他提到49世纪的再入时。在他演讲的那一分钟,他并不是指那种允许在Java中使用递归同步方法调用而不会陷入死锁的重入状态。我说得对吗?我不确定 他仅仅是指

在马丁·奥德斯基的演讲中:,49岁。当他谈到一个问题时,由于静态数据,“编译器不能重新进入”

我对Java中的术语“可重入性”有一个基本的理解(如果我递归调用一个同步方法,那么我就不会陷入死锁),但我仍然不明白Martin在说什么

如果代码是按照演讲的第49分钟所示编写的,为什么不可能在同一个JVM中运行两个编译器呢

他说的是什么样的回归

我想当他提到49世纪的再入时。在他演讲的那一分钟,他并不是指那种允许在Java中使用递归同步方法调用而不会陷入死锁的重入状态。我说得对吗?我不确定

他仅仅是指当on从多个线程访问可变静态数据时,由于竞争条件,程序将无法正常工作这一事实吗

请开导我

他说的是什么样的回归

他说的是“一个计算机科学”对“再进入者”的定义。除此之外,还明确指出:

可重入函数可以由多个任务使用 同时无需担心数据损坏。相反,a 不可重入函数是不能由多个用户共享的函数 任务,除非通过 使用信号灯或在关键部分禁用中断 代码的定义。可重入函数可以随时中断,并且 在以后的时间恢复而不丢失数据。重入函数 使用局部变量或在使用全局变量时保护其数据 都用过了

由于静态变量是全局变量的面向对象版本,Odersky正在讨论一种不保护其全局变量的编译器

他仅仅是指当[sic]打开时,有可变的静态数据这一事实吗 从多个线程访问,则程序将无法正常工作 因为比赛条件


基本上,是的。编译器在并发调用时可能无法正常运行,因为它会混合有关多个程序的信息,从而导致可能的损坏。

您可能会混淆递归和重新进入。谢谢,这是有道理的。事实上,我被Java中的重新进入锁定机制弄糊涂了: