Parallel programming has been around for decades, though before the advent of multi-core processors it was more of an esoteric discipline. 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 issues. Many of these problems arise from the initial design of the threading model of the program and cannot be easily patched later. This paper talks about some of these common threading problems, their effects, and ways to avoid them.