1. A method for the static analysis of concurrent multi-threaded software comprising the computer implemented steps of: scanning the software code to determine locations in individual threads where lock acquisition and lock release operations take place; constructing, augmented versions of the individual threads by modifying those locations in the individual threads to keep track of patterns of at least one of a lock acquisition and a lock release such that an augmented version of each individual thread is constructed; and analyzing the individual augmented threads for correctness by verifying individually, each of the augmented threads.