SICP has an good examples of that problem: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-23.html#%25_sec_3.4
Functional programming may be an answer, but this answer is limited by mother nature.
4. There are computing-jobs that are inherently not parallel.
5. Parallel programming is hard not because of bad programming languages but because of the logical problems that come with shared state and parallelism.
Therefore multicores do not bring a substantial performance benefit. Futhermore because the problems are fundamental logical ones, there is no big hope.
Prototype designs always work. -- Don Vonada