gpt4 book ai didi

java - Martin Odersky 的演讲中 Scala 编译器的早期实现中的可重入性和静态数据。它们有什么关系?

转载 作者:行者123 更新时间:2023-11-30 08:18:05 25 4
gpt4 key购买 nike

在 Martin Odersky 的演讲中:http://youtu.be/9PkxE_L_LMo ,在第 49 分钟,他谈到了一个问题,即由于静态数据,“编译器不可重入”。

我对“可重入”一词在 Java 中的含义有基本的了解(for example,如果我递归调用同步方法,那么我就不会陷入死锁),但我仍然不明白 Martin正在谈论。

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

他说的重入是什么样的?

我假设当他在第 49 分钟的演讲中提到可重入性时,他指的并不是那种允许人们在 Java 中使用递归同步方法调用而不会陷入死锁的可重入性。我对吗?我不知道。

他是否只是指这样一个事实,即当 on 具有从多个线程访问的可变静态数据时,程序将由于竞争条件而无法正常工作?

请赐教!

最佳答案

What kind of reentrancy is he talking about?

他谈论的是可重入者的唯一计算机科学定义。除了 wikipedia article , 这个IBM developerWorks article明确说明:

A reentrant function is one that can be used by more than one task concurrently without fear of data corruption. Conversely, a non-reentrant function is one that cannot be shared by more than one task unless mutual exclusion to the function is ensured either by using a semaphore or by disabling interrupts during critical sections of code. A reentrant function can be interrupted at any time and resumed at a later time without loss of data. Reentrant functions either use local variables or protect their data when global variables are used.

由于静态变量是全局变量的面向对象版本,Odersky 谈论的是不保护其全局变量的编译器。

Is he simply refering to the fact that when on [sic] has mutable static data accessed from several threads then the program will work incorrectly due to race conditions?

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

关于java - Martin Odersky 的演讲中 Scala 编译器的早期实现中的可重入性和静态数据。它们有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com