“…There are techniques for ensuring safe programming using advanced typing [5], analyses for static race detection [44], approaches to concurrency bug fixing [32], tools that flag suspicious concurrency patterns [30,50], and much more. Additionally, dynamic techniques for concurrency bug detection [1,13,34,41,46] often benefit from symbolic reasoning, especially in approaches inspired by model checking or symbolic execution techniques [33,37,43]. Such past work is only superficially related to ours, since the aims, programming abstractions, and analysis techniques used are quite different.…”