Resources & Links

Programming Language Support for Concurrency

A fairly complete list of concurrent programming languages is available on Wikipedia.

Design Patterns for Concurrency

Refactoring for Concurrency

  • Concurrencer – a tool to refactor a sequential Java program into a concurrent Java program. Three refactorings included “…convert int to AtomicInteger, convert.HashMap to ConcurrentHashMap, convert sequential divide-and-conquer algorithm into a parallel divide-and-conquer.”
  • ReLooper – parallelize loops in Java
  • Immutator – conver a mutable class into an immutable class in Java

Testing (and Dynamic Analysis) Tools for Concurrency

  • ConTest – IBM concurrent testing tool that inserts random delays into Java bytecode
  • ConAn – a thread testing tool for Java
  • CHESS – a Microsoft tool for concurrent testing in Visual Studio
  • CalFuzzer – an active testing framework
  • ConMAn – mutation testing tool for concurrent programs written in Java
  • ConcurrencyCloner – clone detection tool that detects user specified patterns (intended for project-specific bug detection). Can be combined with ConTest tool.
  • Coverity Dynamic Analysis – commercial tool that detects bugs in multithreaded Java programs []
  • Chord – static and dynamic analysis tool for Java (listed below as well).
  • Pluralism – Modular object protocol checking for Java
  • Flashlight Dynamic Analysis – a commercial tool from SureLogic that is currently available in early release.
  • MPI testing tools: TotalView, Intel Message Checking, MPI Check, Marmot
  • JFuzz – testing tool built on Java PathFinder
  • MutMut – concurrency mutation testing tool built on Java PathFinder
  • AtomRacer – detection of data races and atomicity violations
  • Eraser – detection of data races by tracking sets of locks that are acquired/held during execution.

Static Analysis Tools for Concurrency

  • FindBugs – works on Java. In the list of bugs detected all of the “Multithreaded correctness” bugs are relevant to concurrency. Command-line interface or eclipse plugin (eclipse plugin update site:
  • Lint – a UNIX tool for C
  • JLint – a Java version of Lint that is available as stand alone or eclipse plugin (eclipse plugin update site:
  • Parasoft JTest – commercial tool that combines static analysis and testing. Has capability to check for thread safety in multithreaded Java programs.
  • Coverity Static Analysis and Static Analysis Custom Checkers – commercial tool that can be used to create custom static analyzers to find concurrency bugs in C/C++ programs.
  • GrammaTech’s CodeSonar – commercial tool that can detect a special case race condition and locking issues in C/C++ (see datasheet for list of all bugs detected).
  • Chord – static and dynamic analysis tool for Java (listed above as well).
  • JSure for Concurrency – a commercial tool from SureLogic that is currently available in early release.
  • ESC/Java 2 – can detect race conditions and deadlocks – requires annotation (more…)
  • Relay – static race detection
  • RacerX – uses flow-sensitive static analysis tool for detection race conditions and deadlocks in C [paper][slides]
  • SyncChecker – a tool developed by F. Otto and T. Moschny for finding race conditions and deadlocks in Java. Reduce false positives by combining static analysis with points-to and may-happen-in-parallel (MHP) information.
  • Warlock – race detection tool for C – requires annotation.

Model Checkings (and Formal Analysis) Tools for Concurrency

  • Java PathFinder (JPF) – NASA open source model checker
  • Moonwalker – a model checker for .NET programs, it works on the CIL code.
  • Bogor – extensible model checker that uses an input language (BIR) that is similar to Java bytecode
  • Verisoft – a bounded model checker for C++
  • CUTE and JCUTE (a Concolic Unit Testing Engine for C and Java) – an explicit path bounded model checker that works on both sequential and concurrent code and is able to detect data races and deadlocks

Leave a Reply

Your email address will not be published. Required fields are marked *