One of the things that’s really hard about debugging threaded programs is tracking down which threads own which locks, and figuring out which locks they are supposed to own. In other words, synchronization bugs. The most difficult symptom to debug is data corruption, because it’s very hard to track down exactly where things start to go [...]
