The document discusses parallelism and multi-core processors. It notes that pre-emptive operating systems provide an illusion of parallel processes even on single-core hardware through context switching. When moving to multi-core, caches may be shared between cores on the same chip but not between chips. Communication is faster on-chip than off-chip. Shared memory requires software strategies like mutual exclusion and non-blocking algorithms to ensure reasonable behavior. Locks and memory barriers like synchronized in Java are used to prevent reading stale data. Compare-and-swap is an algorithm that allows non-blocking updates to shared memory locations.