Programming Language Support for Concurrency
- Java
- java.sun.com – main website for everything Java
- java.util.concurrent – Java concurrency package
- ForkJoinExecutor – will be in Java 7
- Java Concurrency Wiki – good resource on the current and future state of concurreny in Java
- mpiJava – project to support MPI in Java
- JConch – Java concurrency handler
- JScoop – based on a concurreny extension for Eiffel called SCOOP. It adds two annotations (@seperate and @await) to Java that support object execution on multiple processors.
- C++ and C
- POSIX Thread Library – also known as pthreads (C/C++)
- Variations or extensions of pthreads include GNU Pth (UNIX only)
- OpenMP (Open Multi-Processing) API – supports shared memory multiprocessing (C/C++)
- Intel Concurrent Collections (C++)
- MPI – details on the standard and language support
- Grand Central Dispatch (GCD)
- Scala – http://www.scala-lang.org/
- Actors – primary concurrency construct in Scala
- X10 – http://x10-lang.org/
- a course on Principles and Practices of Parallel Programming in X10
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 [http://scan.coverity.com/]
- 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:http://findbugs.cs.umd.edu/eclipse/)
- 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:http://www.jutils.com/eclipse-update)
- 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