Anyone else got any good strategies for concurrency analysis?
Probably not what you're really looking for but, maybe you could try to eschew shared state when at all possible?
I, myself, am absolutely no good with threaded code. Message-passing between multiple processes is just such a nicer way to reason about things, without worrying about race conditions. I've been using 0MQ recently, and it's really great for this, since it's easy to get it working across machines even, as well as having common messaging patterns "just work". Try it out sometime.