memset 操作是“线程间发生在之前”吗?

问题描述 投票:0回答:1

C++ 内存操作,使用原子,针对变量 x。

std::atomic<int> x;
char cache[1024];

主题 1:

memset(cache, 0, 1024);
x.store(20, std::memory_order::release);

主题 2:

int z = x.load(std::memory_order::acquire);
char c = cache[20];

在这种场景下,缓存本身不是原子的,我们能否保证线程2读取缓存时,会得到线程1写入的值?

c++ multithreading atomic
1个回答
0
投票

是的,使用内存顺序释放和获取对 x 进行原子操作可确保“缓存”中非原子操作的正确同步和排序

© www.soinside.com 2019 - 2024. All rights reserved.