Learn Concurrent Programming

Selected stuff (Books)
There are too many platforms and languages with multithreading support. Let's first of all bring here the books which matter, rather than yet another boring platform-specific manual.
 * "The Little Book of Semaphores", Allen B. Downey [get free] -- good for acquiring an intuition on solving of basic (and not so basic) synchronization problems using old good semaphores.
 * "The Art of Multiprocessor Programming", Maurice Herlihy, Nir Shavit  [amazon] -- this book is mostly dedicated to the lock-free synchronization and other advanced topics rather than basic synchronization methods.
 * Any good book on condvars?

Frameworks?
OpenMP, MPI, TBB, TPL, Cilk, Cilk plus, OpenCL, PPL, ParaSail, GCD, fork/join, AMP, CnC, PBB, ArBB, PPL