It seems that often it is better to use real-life analogies to explain some things. But I can't find a single all-encompassing analogy to talk about all things multithreaded. Sometimes I use the room and the locking door analogy, but it doesn't explain deadlocking very easily. The flashcards and TV-watching paradigms are even more limited in number of scenarios they cover...
Have you found a good analogy for this area? If so, what is it?
Edit: I'd like to be able to explain deadlocking AND race conditions AND high contention scenarios AND thread affinity using the same analogy, if possible
Yes, I agree that it's better when it's real. In other words I agree that it's better to avoid analogies for important problems like this. Unfortunately, life doesn't work this way and sometimes developers with little or no multithreading experience are contributing to parts of the system where the above mentioned aspects become critical and quick path to mutual understanding is required. Hence is the question.
Thank you very much for your input!