Theory and Practice of Concurrent Computing homeworks Mutual exclusion Conditional Variables Fine-grained locks Cache coherency Lock-Free data structures Consensus and the power of atomic operations