Skip to main content

Formal Methods–Based Tools for Race, Deadlock, and Other Errors

  • Reference work entry

Definition

Formal methods–based tools for parallel programs use mathematical concepts such as formal semantics, formal specifications, or logics to examine the state space of a program. They aim at proving the absence of common concurrency errors such as races, deadlocks, livelocks, or atomicity violations for all possible executions of a program. Common techniques applied by formal methods–based tools include deductive verification, model checking, and static program analysis.

Discussion

Introduction

Concurrent programs are notoriously difficult to test. Their behavior depends not only on the input but also on the scheduling of threads or processes. Many concurrency errors occur only for very specific schedulings, which makes them extremely hard to find and reproduce.

An alternative to testing is to apply formal methods. Formal methods use mathematical concepts to examine all possible executions of a program. Therefore, they are able to guarantee certain properties for all inputs and...

This is a preview of subscription content, log in via an institution.

Buying options

Chapter
USD   29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD   1,600.00
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Hardcover Book
USD   1,799.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Learn about institutional subscriptions

Bibliography

  1. Abrial J-R (2010) Modeling in Event-B. Cambridge University Press, Cambridge

    MATH  Google Scholar 

  2. Andrews T, Qadeer S, Rajamani SK, Xie Y (2004) Zing: exploiting program structure for model checking concurrent software. In: Gardner P, Yoshida N (eds) Concurrency Theory (CONCUR). Lecture Notes in Computer Science, vol 3170. Springer, Berlin, pp 1–15

    Google Scholar 

  3. Bryant R, Kukula J (2003) Formal methods for functional verification. In: Kuehlmann A (ed) The best of ICCAD: 20 years of excellence in computer aided design. Kluwer, Norwell, pp 3–16

    Google Scholar 

  4. Calcagno C, Parkinson MJ, Vafeiadis V (2007) Modular safety checking for fine-grained concurrency. In: Nielson HR, Filé G (eds) Static analysis (SAS). Lecture Notes in Computer Science, vol 4634. Springer, Berlin, pp 233–248

    Google Scholar 

  5. Chaki S, Clarke EM, Groce A, Jha S, Veith H (2004) Modular verification of software components in C. IEEE Trans. Softw Eng 30(6):388–402

    Google Scholar 

  6. Clarke EM, Grumberg O, Jha S, Lu Y, Veith H (2003) Counterexample-guided abstraction refinement for symbolic model checking. J ACM 50(5):752–794

    MathSciNet  Google Scholar 

  7. Cohen E, Dahlweid M, Hillebrand M, Leinenbach D, Moskal M, Santen T, Schulte W, Tobies S (2009) VCC: a practical system for verifying concurrent C. In: Berghofer S, Nipkow T, Urban C, Wenzel M (eds) Theorem proving in higher order logics (TPHOLs 2009). Lecture Notes in Computer Science, vol 5674. Springer, Berlin, pp 23–42

    Google Scholar 

  8. Engler DR, Ashcraft K (2003) RacerX: effective, static detection of race conditions and deadlocks. In: Scott ML, Peterson LL (eds) Symposium on operating systems principles (SOSP). ACM, New York, pp 237–252

    Google Scholar 

  9. Flanagan C, Freund SN (2000) Type-based race detection for Java. In: Proceedings of the ACM conference on programming language design and implementation (PLDI). ACM, New York, pp 219–232

    Google Scholar 

  10. Flanagan C, Freund SN, Lifshin M, Qadeer S (2008) Types for atomicity: static checking and inference for Java. ACM Trans Program Lang Syst 30(4):1–53

    Google Scholar 

  11. Henzinger TA, Jhala R, Majumdar R (2004) Race checking by context inference. In: Pugh W, Chambers C (eds) Programming Language Design and Implementation (PLDI). ACM, New York, pp 1–13

    Google Scholar 

  12. Jacobs B, Leino KRM, Piessens F, Schulte W, Smans J (2008) A programming model for concurrent object-oriented programs. ACM Trans Program Lang Syst 31(1):1–48

    Google Scholar 

  13. Jacobs B, Piessens F (2008) The VeriFast program verifier. Technical Report CW-520, Department of computer science, Katholieke Universiteit Leuven

    Google Scholar 

  14. Jones CB (1983) Specification and design of (parallel) programs. In: Proceedings of IFIP’83. North-Holland, pp 321–332

    Google Scholar 

  15. Leino KRM, Müller P, Smans J (2009) Verification of concurrent programs with Chalice. In: Aldini A, Barthe G, Gorrieri R (eds) Foundations of security analysis and design V. Lecture Notes in Computer Science, vol 5705. Springer, Berlin, pp 195–222

    Google Scholar 

  16. Lipton RJ (1975) Reduction: a method of proving properties of parallel programs. Commun ACM 18(12):717–721

    MATH  MathSciNet  Google Scholar 

  17. Musuvathi M, Qadeer S, Ball T, Basler G, Nainar PA, Neamtiu I (2008) Finding and reproducing heisenbugs in concurrent programs. In: Draves R, van Renesse R (eds) Operating systems design and implementation (OSDI). USENIX Association, pp 267–280

    Google Scholar 

  18. Naik M, Aiken A, Whaley J (2006) Effective static race detection for Java. In: Schwartzbach MI, Ball T (eds) Programming language design and implementation (PLDI), ACM, pp 308–319

    Google Scholar 

  19. O’Hearn PW (2007) Resources, concurrency, and local reasoning. Theor Comput Sci 375(1–3):271–307

    MATH  MathSciNet  Google Scholar 

  20. Siegel SF (2007) Model checking nonblocking MPI programs. In: Cook B, Podelski A (eds) Verification, model checking, and abstract interpretation (VMCAI). Lecture Notes in Computer Science, vol 4349, pp 44–58

    Google Scholar 

  21. Sterling N (1993) Warlock – a static data race analysis tool. In: USENIX Winter, pp 97–106

    Google Scholar 

  22. Tofan B, Bäumler S, Schellhorn G, Reif W (2009) Verifying linearizability and lock-freedom with temporal logic. Technical report, Fakultät für Angewandte Informatik der Universität Augsburg, 2009

    Google Scholar 

  23. van der Aalst WMP, Hirnschall A, Verbeek HMWE (2002) An alternative way to analyze workflow graphs. In: Pidduck AB, Mylopoulos J, Woo CC, Özsu MT (eds) Advanced information systems engineering (CAiSE). Lecture Notes in Computer Science, vol 2348. Springer, pp 535–552

    Google Scholar 

  24. Villard J, Lozes É, Calcagno C (2010) Tracking heaps that hop with Heap-Hop. In: Esparza J, Majumdar R (eds) Tools and algorithms for the construction and analysis of systems (TACAS). Lecture Notes in Computer Science, vol 6015. Springer, 275–279

    Google Scholar 

  25. Visser W, Havelund K, Brat GP, Park S, Lerda F (2003) Model checking programs. Autom Softw Eng 10(2):203–232

    Google Scholar 

  26. Vo A, Vakkalanka S, DeLisi M, Gopalakrishnan G, Kirby RM, Thakur R (2009) Formal verification of practical MPI programs. In: Principles and practice of parallel programming (PPoPP). ACM, pp 261–270

    Google Scholar 

  27. Voung JW, Jhala R, Lerner S (2007) Relay: static race detection on millions of lines of code. In: Crnkovic I, Bertolino A (eds) European software engineering conference and foundations of software engineering (ESEC/FSE). ACM, pp 205–214

    Google Scholar 

Download references

Acknowledgments

Thanks to Felix Klaedtke and Christoph Wintersteiger for their helpful comments on a draft of this entry.

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2011 Springer Science+Business Media, LLC

About this entry

Cite this entry

Müller, P. (2011). Formal Methods–Based Tools for Race, Deadlock, and Other Errors. In: Padua, D. (eds) Encyclopedia of Parallel Computing. Springer, Boston, MA. https://doi.org/10.1007/978-0-387-09766-4_399

Download citation

Publish with us

Policies and ethics