事件驱动异步程序的TSO鲁棒性验证及带锁和优先级的动态下推网络模型检查
1. 事件驱动异步程序的TSO鲁棒性验证
在事件驱动异步程序中,线程的操作和交互有着复杂的逻辑。以线程的读写操作为例,线程k的转换,特别是读取操作,不能在主线程上执行,因为它们可能访问线程k已发出但未提交的写入值,这些值对其他线程不可见。
为了验证程序对TSO(Total Store Order)的鲁棒性,我们可以通过一种转换方法。将程序P中的每个异步调用 async[any] p(y) 替换为以下代码:
if ( ∗& fork )
async[any] p(y);
fork = false;
else
if (PID == 0)
call p(y);
else
async[main] p(y);
其中, fork 是一个全局布尔标志,初始设置为 true 。这段代码可以根据标志的值,异步、同步或在主线程上调用过程 p(y) 。具体来说:
- 当 fork 为 true 时,进行异步调用,并将 fork 置为 false 。
- 当 fork 为 false 时,如果当前线程是主线程(通过 PID ==
超级会员免费看
订阅专栏 解锁全文
1172

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



