事件驱动异步程序的TSO鲁棒性验证
1. 引言
异步事件驱动编程允许程序在调用后异步执行过程,例如作为处理外部事件的回调函数。像Android、iOS和Javascript中的现代用户界面(UI)框架,就是异步事件驱动编程的实例。这些框架会专门设置一个主线程(UI线程)来处理用户界面事件。为了保证对用户事件的响应性,通常做法是让UI线程只处理每个事件的短期任务,而将更复杂的计算任务交给异步任务,这些异步任务会在不同的后台线程上并行执行。
Bouajjani等人提出了一个针对此类程序的正确性标准,即程序的多线程语义应该是单线程语义的细化。单线程语义中,用户事件会按顺序依次执行,事件处理程序创建的异步任务会在创建者执行完成后异步但按顺序执行。满足这个细化条件的程序被称为具有并发鲁棒性。该标准的违反在实践中对应着不良行为,并且对于布尔程序而言,可以通过线性时间归约到顺序程序的状态可达性问题,从而高效地进行检查。
并发鲁棒性假设程序在顺序一致性(SC)内存模型下执行,即不同线程的操作会按程序顺序交织执行。但现代多处理器为了提高性能,会采用更弱的内存模型,如x86机器中的全存储序(TSO),它会放宽程序顺序,允许读操作超越写操作。本文将研究在TSO内存模型下执行的异步事件驱动程序,探讨并发鲁棒性和TSO鲁棒性之间的关系。
1.1 相关工作
- 状态鲁棒性 :这是在TSO下进行SC推理的最弱正确性标准,即SC和TSO下程序的可达状态集相同。但该问题复杂度高,对于有限线程和有限数据域的程序,至少是非原始递归的。已有符号决策过程和过近似分析方法,但难以得到高效精确的解决方案。
超级会员免费看
订阅专栏 解锁全文
40

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



