title: What are the important threading API calls to understand before writing multi-threaded code?
body: <p>Recently I was blogging about the oft over-used idea of multi-threading in .Net.  I put together a staring list for "APIs you should know first":</p>
  
  <ul>
  <li>Thread</li>
  <li>ThreadPool</li>
  <li>ManualResetEvent</li>
  <li>AutoResetEvent</li>
  <li>EventWaitHandle</li>
  <li>WaitHandle</li>
  <li>Monitor</li>
  <li>Mutex</li>
  <li>Semaphore</li>
  <li>Interlocked</li>
  <li>BackgroundWorker</li>
  <li>AsyncOperation</li>
  <li>lock Statement</li>
  <li>volatile</li>
  <li>ThreadStaticAttribute</li>
  <li>Thread.MemoryBarrier</li>
  <li>Thread.VolatileRead</li>
  <li>Thread.VolatileWrite</li>
  </ul>
  
  <p>Then I started thinking maybe not all of these are important.  For instance, Thread.MemoryBarrier could probably be safely removed from the list.  Add to that the obvious statement that I don't know everything and I decided to turn here.  </p>
  
  <p>So this is a broad and opinionated question, but I'm curious as to the collective's opinion as to a best-practice study list.  Essentially I'm looking for a short hit list for new and/or Jr. developers to work from when beginning to write multi-threading code in C#.</p>
  
  <p>So without further commentary, what should be added or removed from the above list?</p>