ARM64上的内存屏障有多昂贵?——DMB指令的成本。
创始人
2024-09-13 16:00:26
0

内存屏障是一种同步机制,用于确保在多线程环境下,共享内存中的数据在不同线程之间正确同步。在 ARM64 体系结构中,内存屏障的实现是通过 DMB 指令完成的。虽然 DMB 指令是可用的,但它可能非常昂贵,因为它需要等待先前的存储操作和加载操作完成后才能继续执行。

以下是一种解决方法,可以在一定程度上减少 DMB 指令的成本:

#include 

struct data {
    std::atomic value;
    char padding[60];
};

void do_something (data *d) {
    int tmp = d->value.load(std::memory_order_relaxed);
    if (tmp % 2 == 0) {
        d->value.store(tmp + 1, std::memory_order_release);
    }
    else {
        // No need for memory barrier here
        // because the value is already odd
        d->value.store(tmp + 2, std::memory_order_release);
    }
}

int main () {
    data d{0};
    do_something (&d);
    return 0;
}

在这个例子中,对数据结构进行修改时,只有在数据值为偶数时才需要使用内存屏障来确保正确同步。通过使用 std::memory_order_release 标志位,可以在存储操作之间增加一个内存屏障,以确保正确同步。

在计算机体系结构中,内存屏障是一种强制同步的机制。尽管内存屏障的成本很高,但它可以确保在多线程和多核心系统中,共享内存中的数据在不同线程和不同核心之间正确同步,从而提高系统的稳定性和性能。

相关内容

热门资讯

七分钟实锤!德州ai辅助软件(... 七分钟实锤!德州ai辅助软件(德扑ai)其实有挂(详细辅助总结教程)1、进入到德州ai辅助软件黑科技...
十分钟实锤!智星德州菠萝外挂(... 十分钟实锤!智星德州菠萝外挂(来玩德州)都是真的有挂(详细辅助安装教程)1、很好的工具软件,可以解锁...
十分钟实锤!德扑ai智能机器人... 十分钟实锤!德扑ai智能机器人(wepower德州)原来是真的有挂(详细辅助AA德州教程)1、玩家可...
六分钟实锤!德州微扑克辅助(德... 六分钟实锤!德州微扑克辅助(德州机器人)其实存在有挂(详细辅助揭秘教程)1、进入到德州微扑克辅助黑科...
2分钟实锤!德州ai辅助(德州... 2分钟实锤!德州ai辅助(德州扑克)都是是有挂(详细辅助透明挂教程)1、在德州ai辅助ai机器人技巧...
7分钟实锤!德扑数据软件(德州... 7分钟实锤!德扑数据软件(德州机器人)都是真的是有挂(详细辅助扑克教程)1、打开软件启动之后找到中间...
第7分钟实锤!德州之星外挂(云... 第7分钟实锤!德州之星外挂(云扑克德州)一直真的有挂(详细辅助详细教程)1、打开软件启动之后找到中间...
七分钟实锤!德扑起手牌胜率图(... 七分钟实锤!德扑起手牌胜率图(德州nzt)确实真的是有挂(详细辅助曝光教程)1、下载好德扑起手牌胜率...
7分钟实锤!德扑ai助手(德州... 7分钟实锤!德扑ai助手(德州扑克)原来有挂(详细辅助透明教程);1、不需要AI权限,帮助你快速的进...
第七分钟实锤!智星德州菠萝开挂... 第七分钟实锤!智星德州菠萝开挂(线上德州)真是真的是有挂(详细辅助详细教程);1、很好的工具软件,可...