Formal Analysis of Concurrent Programs