Over the last couple months I've been working with programs that involve multi-threading aspects to them. Multi-threaded programs a very new to me and while I understand the crude basics, how to go about designing a multi-threaded program is still beyond my skill-set. I would like to know what resources that people have found online that gave you an "Omg! That makes total sense now!" moment for this topic.
This should probably be a community wiki but due to the latest changes to SO, I can't make it one (that I know of at least).
Edit: I'm aiming toward reading that is language-independent if possible. Though I don't want to discurage anything that might be particular of a language if it is informative enough to general multi-threading program design.