Algorithmic advances in dynamic analysis for detecting concurrency bugs