基于事件的多线程Java结构化操作语义
1. 引言
Java作为一种面向对象的编程语言,提供了简单且紧密集成的并发编程支持。在Java的并发模型中,多个线程控制运行在并行,并通过操作驻留在共享主内存中的对象来进行信息交换。这种模型的精确非正式描述在Java语言规范中给出。本文提出了Java的一个重要子语言的正式语义,包括线程的运行和停止、通过共享内存进行线程交互、通过监控和通知进行同步,以及顺序控制机制,如异常处理和返回语句。在这里,我们专注于Java的动态语义,并将对语言的静态、类型相关方面的详细处理,例如类声明,留给后续的论文。
2. 事件空间的概念
事件空间(event space)记录了计算的“历史”信息,这些信息根据语言规范限制了某些操作的执行,因此也限制了某些操作规则的适用性(见第3.4节)。给定两个事件空间(X,≤X)和(Y,≤Y),我们说(X,≤X)是(Y,≤Y)的一个保守扩展(conservative extension),当且仅当Y⊆X和≤Y⊆≤X,并且对于所有的a, b∈Y, a≤X b意味着a≤Y b。
2.1 事件空间的扩展
一个新的事件a附加到一个事件空间η=(X,≤X),我们使用如下定义的操作⊕:
graph TD
A[事件空间 η=(X,≤X)] --> B[事件空间 η'=(Y,≤Y)]
B --> C[保守扩展]
C --> D[a'=α'(θ)由θ在η'中]
C --> E[a'=β'(x)在η'中]
- η′