「アトミック vs 非アトミック」という概念を頭の中に定着させようとしています。私の最初の問題は、それに関する「現実のアナロジー」を見つけることができなかったことです。アトミック操作または同様のものに対する顧客/レストラン関係のように。
また、アトミック操作がスレッドセーフ プログラミングにどのように組み込まれるかについても学びたいと思います。
このブログ投稿では; http://preshing.com/20130618/atomic-vs-non-atomic-operations/ 次のように言及されています。
共有メモリで動作する操作は、他のスレッドと比較して単一のステップで完了する場合、アトミックです。共有変数でアトミック ストアが実行されると、他のスレッドは変更が半分完了したことを確認できません。共有変数でアトミック ロードが実行されると、ある瞬間に表示された値全体が読み取られます。非アトミックなロードとストアは、これらの保証を行いません。
「他のスレッドは半分完了した変更を観察できない」とはどういう意味ですか?
つまり、スレッドはアトミック操作が完了するまで待機しますか? そのスレッドがその操作についてどのように知っているかはアトミックですか? たとえば、.NET では、フラグを設定して他のスレッドをブロックするオブジェクトをロックするかどうかを理解できます。しかし、アトミックはどうですか?他のスレッドは、アトミック操作と非アトミック操作の違いをどのように認識していますか?
また、上記のステートメントが当てはまる場合、すべてのアトミック操作はスレッドセーフですか?