title: Is waiting for an event subject to spurious wakeups?
body: <p>The MSDN page for <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms686301(v=vs.85).aspx" rel="nofollow">SleepConditionVariableCS</a> states that </p>
  
  <blockquote>
    <p>Condition variables are subject to spurious wakeups (those not
    associated with an explicit wake) and stolen wakeups (another thread
    manages to run before the woken thread). Therefore, you should recheck
    a predicate (typically in a while loop) after a sleep operation
    returns.</p>
  </blockquote>
  
  <p>As a result the conditional wait has to be enclosed in a while loop i.e. </p>
  
  <pre><code>while (check_predicate())
  {
      SleepConditionVariableCS(...)
  }
  </code></pre>
  
  <p>If I were to use <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms682396(v=vs.85).aspx" rel="nofollow">events</a> instead of Conditional Variables can I do away with the while loop while waiting (<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx" rel="nofollow">WaitForSingleObject</a>) for the event to be signaled?</p>