在没有任何锁的情况下加入另一个线程后是否需要内存屏障?

时间:2019-12-20 01:29:39

标签: c++ multithreading c++11

我想知道如果我想立即读取从该线程存储的值,是否需要在线程连接后放置内存屏障。线程连接是否已经暗示内存屏障?

vector<int> v(1 << 21);

thread th([&]() {
    for (int i = 0; i < (1 << 20); i++) {
        v[i] = i * 123; // store some kind of calculation results into the vector
    }
});

for (int i = (1 << 20); i < (1 << 21); i++) {
    v[i] = i * 123;
}

th.join();

// Is any memory fence needed to be here?

// use the values from another thread... 
printf("%d\n", v[1234]);
// ...

1 个答案:

答案 0 :(得分:1)

不。不需要内存屏障,因为thread::join将阻塞直到执行线程完成执行。另外,加入操作由运行循环后的主线程 执行。我看不出加入操作后将如何需要隔离墙。