title: What is the best way to learn more about imperative-style concurrent programming?
body: <p>Have had to write my first "proper" multithreaded coded recently, and realised just how little I knew about how "imperative-style" (ie, concurrency models used by C++/C#/Java, and the like) concurrent programming techniques.</p>
  
  <p>What resources are there (both books and online tutorials, etc) in order to learn more about this area of coding-fu?</p>
  
  <p>NB: I'm not asking about concurrency models that are arguably better (Erlang's message passing, or Clojure's STM), just paradigms used in imperative languages.</p>