我想知道如果我想立即读取从该线程存储的值,是否需要在线程连接后放置内存屏障。线程连接是否已经暗示内存屏障?
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]);
// ...
答案 0 :(得分:1)
不。不需要内存屏障,因为thread::join
将阻塞直到执行线程完成执行。另外,加入操作由运行循环后的主线程 执行。我看不出加入操作后将如何需要隔离墙。