AutoSynch:基于谓词标记的自动信号监视器
分布式、并行与集群计算
2013-03-04 v1 编程语言
摘要
大多数编程语言使用带有显式信号的监视器来实现共享内存程序中的同步。要求程序员显式地给线程发信号会导致许多并发错误,例如遗漏通知或通知了错误的条件变量。在本文中,我们描述了一种在Java中实现的自动信号监视器,称为AutoSynch,它通过消除程序员的信号负担来消除此类并发错误。我们表明,认为自动信号监视器代价高昂的观点是错误的。对于大多数问题,基于AutoSynch的程序几乎与基于显式信号的一样快。对于某些问题,AutoSynch甚至比显式信号更快,因为它从不使用signalAll,而程序员在使用显式信号机制时最终会使用signalAll。AutoSynch基于三个新颖的想法实现了高效的同步。我们引入了一种称为全局化的操作,它使得每个线程都能进行谓词评估,从而减少程序执行期间的上下文切换。其次,AutoSynch通过使用一种称为中继不变性的属性来避免signalAll,该属性保证只要可能,就至少有一个条件为真的线程被信号唤醒。最后,AutoSynch使用一种称为谓词标记的技术来高效地确定应该被信号唤醒的线程。为了评估AutoSynch的效率,我们实现了许多著名的同步问题,如生产者/消费者问题、读者/写者问题和哲学家就餐问题。结果表明,AutoSynch几乎与显式信号监视器一样高效,在某些情况下甚至更高效。
引用
@article{arxiv.1303.0276,
title = {AutoSynch: An Automatic-Signal Monitor Based on Predicate Tagging},
author = {Wei-Lun Hung and Vijay K. Garg},
journal= {arXiv preprint arXiv:1303.0276},
year = {2013}
}
备注
10 pages, 15 figures