gpt4 book ai didi

java - x86 上 Java 的侵入性最小的编译障碍

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:44 24 4
gpt4 key购买 nike

如果我有一个 Java 进程通过共享的 ByteBuffer 或类似的东西与其他一些进程交互,那么 C/C++ 中编译器屏障的侵入性最小的等价物是什么?不需要可移植性 - 我对 x86 特别感兴趣。

例如,根据伪代码,我有 2 个进程读取和写入内存区域:

p1:
i = 0
while true:
A = 0
//Write to B
A = ++i

p2:
a1 = A
//Read from B
a2 = A

if a1 == a2 and a1 != 0:
//Read was valid

由于 x86 上的严格内存排序(加载到单独的位置不重新排序,读取到单独的位置不重新排序)这在 C++ 中不需要任何内存屏障,只需在每次写入和每次读取之间设置编译屏障(即 asm volatile)。

如何以最便宜的方式在 Java 中实现相同的排序约束。有什么比写入 volatile 更不干扰的吗?

最佳答案

您可以使用 lazySet,它可以比设置 volatile 字段快 10 倍,因为它不会停止 CPU 管道。例如AtomicLong lazySet 或者您可以根据需要使用 Unsafe 等效项。

关于java - x86 上 Java 的侵入性最小的编译障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660529/

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