在下面的代碼中,由於原子線程限制,線程2中的x
的值將始終爲10。從C++中的另一個線程讀取指針
int x;
atomic<bool> b(false);
// thread 1:
x = 10;
atomic_thread_fence(memory_order_release);
b = true;
// thread 2:
while(!b){}
atomic_thread_fence(memory_order_acquire);
assert(x == 10); // x will always be 10
但是在下面的代碼中,*x
會在線程2中始終爲10嗎?
int* x = new int;
atomic<bool> b(false);
// thread 1:
*x = 10;
atomic_thread_fence(memory_order_release);
b = true;
// thread 2:
while(!b){}
atomic_thread_fence(memory_order_acquire);
assert(*x == 10); // will *x always be 10?
我幾乎沒有看到任何區別。我認爲內存柵欄因爲原子布爾訪問而不需要。 – knivil