3

Anthony Williams によるC++ Concurrency in Actionを読んでいます。セクション「リラックスした順序付けについて」には、次のように記載されています。

「この番号を書き留めて、リストの一番下にあったものを教えてください」(交換)、「一番下の番号がリストのそれはそれです; そうでなければ、私が何を推測すべきだったか教えてください」(compare_exchange_strong) が、それは一般原則には影響しません。

そのような操作は常に変更順序で最後の値を読み取ることを意味しますか (追加のスレッド間が制約の前に発生しない場合)? つまり、キャッシュの更新などがありますか (リラックスした順序であっても)?

4

1 に答える 1

7

はい。C++ 標準は次のように述べています (29.3/10):

アトミックな read-modify-write 操作は、read-modify-write 操作に関連付けられた書き込みの前に書き込まれた (変更順序での) 最後の値を常に読み取る必要があります。

exchange操作と成功した操作の両方compare_exchange_{weak,strong}が読み取り-変更-書き込み操作です。

于 2013-02-10T17:27:41.243 に答える