“…Many real-world large-scale multithreaded programs are error-prone. They suffer from concurrency bugs [34] such as data races [18], [19], [46], atomicity violations [27], [32], [34], and deadlocks [14], [15], [29], [36]. For instance, a deadlock occurrence in an execution may prevent (a part of) the program execution from making further progress.…”