race condition

Really, really bad news. Two bits of software (often not in the same program) are contending for a shared resource without locking the other out, leading to strange things as the two sequences of operations interleave in odd ways. Race conditions are always bugs (unless the goal is to demonstrate race conditions!) and are almost always incredibly difficult to hunt down and debug.

It is race conditions that (in general) make programming with multiple threads-of-execution difficult. With processes, you're contending for shared OS resources, and with threads those shared resources can be virtually anything. Luckily, Tcl does most of the work for you in helping out with this stuff, but you still need to be aware when accessing anything shared (like files...).