Concurrent Programming Metaphors

Last night I was explaining the troubles with concurrent programming (or, more specifically, I was explaining why immutable data structures were nice, and particularly the implications on concurrent programming) and I came up with a couple of fairly entertaining analogies:
  1. Concurrent programming is like playing a monopoly game where all but every 12th tile is a `You're screwed' tile. Meaning unless you roll a perfect 12 every time, you're screwed.
  2. Concurrent programming is like playing inverse Russian roulette with a machine gun. Meaning every spot other than the 6th is a live bullet (on average), and you've got a nice long stream of these bullets in a machine gun.
What the implications of a machine gun are depends on how you want to see it. The one is that you have to be very careful to just shoot it once and hope that it's a bank. The other is that if you shoot it multiple times (accidentally or intentionally), the likelihood that you'll get several blanks in a row is practically zero as the number of shots increases.