>>814
>それはstd:::condition_variableを使った場合に限定していますか?
いいえ

>pthreadをダイレクトに使った場合はどうなりますか?
どう使うつもりかわわからんが、コンパイラに中身を知りようが無い関数の
呼び出しがループ内に生じる限り同じ話

>客観的な文献を示してほしいです
(1) 変数に対する副作用がある(かもしれない)関数がループ外にくくりだされないこと
 コンパイラはソースコードをオブジェクトコードに翻訳する際、
 ソースコードに書かれたアルゴリズム(有限ステップで終わる&非同期要素無し)の
 動作結果を変えてはならない。この原則はコンパイラの教科書に書いてあるし常識と言っても過言ではない
 で、変数に対する副作用がある(かもしれない)関数の不適切な最適化はこの原則にひっかかる

(2) 少なくともMSVCがメモリバリアの意味を知っている根拠
https://docs.microsoft.com/ja-jp/cpp/intrinsics/readwritebarrier?view=vs-2015
これ、VS2010までは非推奨ではなかったし、サンプルコードも載っていたが無くなってたorz