Parallel programming has been around for decades, though before the advent of
multi-core processors it was more of an esoteric discipline. Now, numerous
programmers have tripped over the common stumbling blocks and by recognizing
these problems - and knowing how to manage them - you can avoid the same
problems. Many of these problems arise from the initial design of the threading
model of the program, and cannot be easily patched later. This article lists some
of these common threading problems, their effects, and ways to avoid them.