Parallel programming has been around for decades, though before the advent of
multi-core processors, it was more of an esoteric discipline. Now that numerous
programmers have tripped over the common stumbling blocks, you can benefit
from their experience by understanding the common problems before designing a
parallel program. Many of the problems arise from the overall design of the data
used by the program, and cannot be easily patched later. This article surveys
some of these common problems, their symptoms, and ways to circumvent them.