title: Do condition variables still need a mutex if you're changing the checked value atomically?
body: <p>Here is the typical way to use a condition variable:</p>
  
  <pre><code>// The reader(s)
  lock(some_mutex);
  if(protected_by_mutex_var != desired_value)
      some_condition.wait(some_mutex);
  unlock(some_mutex);
  
  // The writer
  lock(some_mutex);
  protected_by_mutex_var = desired_value;
  unlock(some_mutex);
  some_condition.notify_all();
  </code></pre>
  
  <p>But if protected_by_mutex_var is set atomically by say, a compare-and-swap instruction, does the mutex serve any purpose (other than that pthreads and other APIs require you to pass in a mutex)? Is it protecting state used to implement the condition? If not, is it safe then to do this?:</p>
  
  <pre><code>// The writer
  atomic_set(protected_by_mutex_var, desired_value);
  some_condition.notify_all();
  </code></pre>
  
  <p>With the writer never directly interacting with the reader's mutex? Note that the 'protected_by_mutex_var' name is no longer really appropriate (it's not mutex protected anymore). If so, is it even necessary that different readers use the same mutex?</p>