The document discusses practical solutions for multicore programming. It describes some challenges with concurrent programming such as lost updates, deadlocks, and lack of performance. It then presents several solutions to address these challenges, including software transactional memory (STM), lock-free data structures, and relaxed consistency models. STM approaches discussed include DSTM2, JVSTM, Atom-Java, and Deuce STM. It also discusses the need for fine-grained concurrent data structures like a lock-free pool. The document concludes by discussing how relaxing linearizability requirements through approaches like quasi-linearizability can improve concurrency.