• Media type: E-Article
  • Title: Multithreaded test synthesis for deadlock detection
  • Contributor: Samak, Malavika; Ramanathan, Murali Krishna
  • Published: Association for Computing Machinery (ACM), 2014
  • Published in: ACM SIGPLAN Notices, 49 (2014) 10, Seite 473-489
  • Language: English
  • DOI: 10.1145/2714064.2660238
  • ISSN: 0362-1340; 1558-1160
  • Keywords: Computer Graphics and Computer-Aided Design ; Software
  • Origination:
  • Footnote:
  • Description: <jats:p> Designing and implementing <jats:italic>thread-safe</jats:italic> multithreaded libraries can be a daunting task as developers of these libraries need to ensure that their implementations are free from concurrency bugs, including deadlocks. The usual practice involves employing software testing and/or dynamic analysis to detect deadlocks. Their effectiveness is dependent on <jats:italic>well-designed</jats:italic> multithreaded test cases. Unsurprisingly, developing multithreaded tests is significantly harder than developing sequential tests for obvious reasons. </jats:p> <jats:p> In this paper, we address the problem of automatically synthesizing multithreaded tests that can induce deadlocks. The key insight to our approach is that a subset of the properties observed when a deadlock manifests in a concurrent execution can also be observed in a single threaded execution. We design a novel, automatic, scalable and <jats:italic>directed</jats:italic> approach that identifies these properties and synthesizes a deadlock revealing multithreaded test. The input to our approach is the library implementation under consideration and the output is a set of deadlock revealing multithreaded tests. </jats:p> <jats:p> We have implemented our approach as part of a tool, named OMEN <jats:sup>1</jats:sup> . OMEN is able to synthesize multithreaded tests on many multithreaded Java libraries. Applying a dynamic deadlock detector on the execution of the synthesized tests results in the detection of a number of deadlocks, including 35 real deadlocks in classes <jats:italic>documented</jats:italic> as thread-safe. Moreover, our experimental results show that dynamic analysis on multithreaded tests that are either synthesized randomly or developed by third-party programmers are ineffective in detecting the deadlocks. </jats:p>