Computer Science: Concurrency and Parallel Programming