Agreed.  Writing low-level synchronization code is hard and error prone.  It's almost always worthwhile to burn some extra memory or CPU to choose a solution that's multiprocess instead, or just eat the performance/scalability cost of traditional serialized code.<p>But it's a <i>ton</i> of fun when you get it right.  Sort of the "cycle counting" of the modern world.