gpt4 book ai didi

c++ - 非同步写入的同步读取

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:47 24 4
gpt4 key购买 nike

是否可以调用一个内存栅栏来刷新所有 cpu 缓存(在多处理器设置上),以便您可以同步读取和使用非同步写入(即常规 MOV)写入的地址?

例如

// Thread 1
data[0] = 0x67230123
std::memcpy(ptr, data, data_size);

// Thread 2
// fence
if (*ptr == 0x67230123)
printf("Hello World")

我知道这有点奇怪并且会影响性​​能,但我有(可能)充分的理由需要它。

最佳答案

如果我们谈论的是 Linux,您可以使用 rmb() 和 wmb() 函数,它们分别是读取和写入内存屏障。

您为此编写的代码可能如下所示:

// Thread 1
std::memcpy(ptr, data, data_size);
wmb();

// Thread 2
smp_rmb();
if (*(ptr + 32) == 0x67230123)
printf("Hello World")

wmb() 强制 Thread1 将存储在 CPU 缓存中的所有值写入 RAM。并且 rmb() 强制 Thread2 将所有需要的值从 RAM 加载到 CPU 缓存,以便在以下语句中使用。

关于c++ - 非同步写入的同步读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33413140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com