C++のメモリ障壁の仕組みを理解したいと思います。例えば 、私はそのような場合にはstd ::アトミック使用しています:std :: atomic memory barrierの理解
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();//returns 1 or other value written by other thread
a.store (n, std::memory_order_release);
}
はコードの下と同等の意味的に上記のもののコードですか?
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();
std::atomic_thread_fence(std::memory_order_release);
n = 100;//assume assignment is atomic
}
私は右だ場合、私は行動を引数としてメモリバリアを受け入れることができ、すべてのC++の機能のために同じであることを確認することができますか?
2つのexemples 'int n = a.load(std :: memory_order_acquire)'と2番目の例では、4行目の 'a = 100'ですか? – Oliv
いいえ、ロード関数はstd :: atomic load関数ではありません。これは、いくつかのデータを返すユーザ実装の関数 –
この例は混乱しているようです。最初の抜粋は明らかに値を 'a'に格納します。しかし、2番目の抜粋は '' a ''を全く参照していないので、なぜそこにありますか? –