C++ では、var++ や var-- などは合理的にスレッドセーフであると常に信じ込まされてきたように感じます。つまり、ある時点で値が増減することが保証されているということです。
この信念に基づいて、スレッドセーフ操作のためのノンブロッキング アルゴリズムの理解を深めました。しかし、今日、インクリメントされていない変数があるため、ショックを受けています。したがって、過去の大量の作業の妥当性に疑問を呈しています。
小さなプログラムでは、0 に初期化されたグローバル変数があります。8 つの P スレッドが起動され、それぞれが varname++ を合計 1024 回呼び出し、合計で 8*1024 インクリメントされます。しかし、すべてのスレッドの実行が終了すると、varname の値は 8*1024 より大幅に小さくなります。
ここでボートに乗り遅れたのですか?誰かが私を啓発してもらえますか?