The biggest problem isn't poor hardware support or the current multi thread APIs. The real problem is in our inadequate way to think always in a single, sequential line to solve our programming problems.
Modern languages like C#, Java and Scala already have a lot of nice support to parallel processing. Heck, back in the 80's there were already a really cool and simple language called occam (as in Occam's Razor) that was inherently parallel (check for more info about, it's a fascinating read) to the point of requiring that you should explicitly identify any part of the code that were supposed to be executed in a sequential way. But we need to think radically different to resolve problems with parallelism, and this is hard. You need to discard a lot of experience and common wisdom to do good use of this. So basically, we are the cern of the problem.