Concurrent Programming by Alan Burns & Geoffrey Davies