开放多线程事务支持与OPTIMA框架解析
1. 开放多线程事务基础
1.1 事务中止情况
- 若事务被中止,在对事务对象所做的更改被撤销后,参与事务的成员可以异步退出。
- 若参与事务的任务在未对事务结果进行投票的情况下消失(即叛逃任务),该事务将被中止。
1.2 异常处理
1.2.1 内部异常
每个参与者在事务内部都有一组内部异常处理程序,用于处理执行过程中可能出现的内部异常。当内部异常被抛出时,会调用相应的处理程序来处理该异常,并完成参与者在事务内的活动。若处理程序无法处理该情况,可发出外部异常。若参与者“忘记”处理内部异常,则会发出 Transaction_Abort 外部异常。
1.2.2 外部异常
外部异常需要显式发出,每个参与者都可以发出其外部异常集中的任何异常。每个参与事务的成员都有一个包含异常上下文。当一个参与成员发出外部异常时,该异常会传播到其包含的上下文。若有多个参与成员发出外部异常,每个成员都会将自己的异常传播到自己的上下文。若事务中的任何参与者发出外部异常,事务将被中止,并且 Transaction_Abort 异常会被发送给所有投票提交的参与成员。由于派生的参与者不会在事务结束后继续存在,因此除了 Transaction_Abort (会导致事务中止)外,它们不能发出任何其他外部异常。
2. Ada接口
2.1 实现方式
在Ada中对开放多线程事务的支持是以库的
超级会员免费看
订阅专栏 解锁全文
589

被折叠的 条评论
为什么被折叠?



