title: What's are practical example where acquire release memory order differs from sequential consistency?
body: <p>Clearly, sequential consistent atomic operations differ in their valid observable behavior from acquire-release only operations in a valid C++ program. Definitions are given in the C++ standard (since C++11) or <a href="http://en.cppreference.com/w/cpp/atomic/memory_order" rel="noreferrer">here</a>. </p>
  
  <p>However, I have never come across a real-world example of an algorithm or a data structure that where acquire-release semantics is insufficient and sequential consistency is needed. </p>
  
  <p>What would be an <strong>practical</strong> example of a real world algorithm or data structure, where sequential consistency is needed and acquire-release memory order is not enough?</p>
  
  <p>Note, that even <a href="https://stackoverflow.com/questions/41847511/is-stdmutex-sequentially-consistent"><code>std::mutex</code> does not guarantee sequential consistency</a>. </p>