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辅助软件,雀神辅助器免费下载,乐友棋牌有没有挂(有挂技巧)1、该软件可以轻松地...
玩家必看秘籍!线上德州ai智能... 玩家必看秘籍!线上德州ai智能机器人,雀神小程序脚本,星悦云南麻将有挂吗(有挂细节)星悦云南麻将有挂...
必看攻略!德扑之星ai代打,雀... 必看攻略!德扑之星ai代打,雀神全民棋牌云南有挂吗,闲娱江西棋牌怎么才能拿到好牌(有挂攻略)1、让任...
重磅来袭!wepoke辅助是真... 重磅来袭!wepoke辅助是真的,微信雀神小程序辅助器免打扰,湖北休闲有辅助吗(有挂辅助);亲,关键...
一起来讨论!wopoker手机... 一起来讨论!wopoker手机辅助,广东雀神麻将插件ios怎么购买,八闽十三水有辅助挂吗(有挂解说)...
一秒答解!微扑克有挂,微信小程... 一秒答解!微扑克有挂,微信小程序广东雀神辅助器,家乡大贰道具有用吗(有挂黑科技)1、每一步都需要思考...
新手必备!wepoke辅助软件... 新手必备!wepoke辅助软件下载链接,小程序雀神广东麻将辅牌器,快玩炸翻天辅助功能(有挂辅助);1...
科普分享!wpk透视辅助测试,... 科普分享!wpk透视辅助测试,广东雀神辅助器ios免费版,辽宁心悦麻将有挂吗(有挂揭秘)1、该软件可...
分享一款!来玩德州app外挂,... 分享一款!来玩德州app外挂,广东雀神智能辅助插件下载,皮皮跑得快为什么总是输(有挂教程);1、进入...