貴重なお話が聞けたのでメモらせて頂きます。atomic保証はバリアなしのxaddでも大丈夫だと思います。lock-prefixなしのxaddで行けるんじゃないかなぁと思ってる次第です。結局atomicに行うために内部でacomicallyに実行するためにメモリバリアを展開してる、という事でしょうか。Intelはその2つをそう遠くないうちに切り分けるだろう、と言われています。cas命令の実行コストのうち大半がメモリバリアに由来するものらしく、メモリバリアを使わないCASありうる以上、現時点でその手の考察が行われていそうだな、と思いまして。@kumagi_botガチャピン先生がすごく怖い。気を抜いたら頭からバリバリ食べられそうだ。ええと、僕の記憶がたしかならもう別れてるのあるはず。safeにするためにメモリバリアなしCASが必要で。あれ、いま実装どうなってるんだったかな。いまどきのCPUはバリアなしのCASが使われてたりするんですね。いうか高速化のため以外でメモリバリアなしという世界に需要があることの方に驚きます。lock-prefixなしのxaddが速いのかどうかは一度手元でベンチとって見比べてみます。@kumagi_botうぉ。boost::shared_ptrで使われてるatomicカウンタは値の取得の為に0足し算のxaddをprefix付きで呼び出してるのか...。あぁでも0加算ならデコードされた時点で適切な方法で対処されそうな気がする。@kumagi_botメモリバリアは他スレッドから観測されるメモリの操作順序を保証するもので、shared_ptrにとってはポインタの増減は他のメモリ内容になんのdependencyも無いんじゃないかなぁと思った。アクセスするときはxaddの戻りが1以上な事を確認したあとなんだし。@kumagi_botそしてlock-prefixは今のところの理解だとacq_relバリアを使う事と同義だと考えています。どこで読んだか忘れたけどどなたか詳しい人に教示願いたいです。