The Pillars of Concurrency
How Much Scalability Do You Have or Need?
Use Critical Sections (Preferably Locks) to Eliminate Races
Apply Critical Sections Consistently Avoid Calling Unknown Code While Inside a Critical Section
Use Lock Hierarchies to Avoid Deadlock
Break Amdahl’s Law!
These are an excellent set of articles on the subject of concurrency and programming for multi-core that analyzes the many facets of the subject – from background theory, to locking and on to achieving scalability and performance.