Jim Mauro has published an interview with Darryl Gove, author of Multicore Application Programming, about concurrency, the current state of multi-threaded application software, and the effectiveness of automatic parallelization technology.
Looking at the issue more broadly, poor scaling from lock contention is often relatively easy to diagnose. It is not necessarily that easy to fix, but knowing that the problem is there is the first step to solving it. There are other limitations to scaling that are less easy to diagnose and less easy to solve. Good examples of this are memory locality issues due to NUMA architectures or resource contention in shared processor pipelines. It can be hard to identify these problems, and it can be nearly impossible to provide a general solution for them.