Elements of concurrent programming (Second edition)