小编kRs*_*kRs的帖子

x86架构上的Java,易失性和内存障碍

这更像是一个理论问题.我不确定所有的概念,编译器行为等是否都是最新的并且仍然在使用,但我想确认我是否正确理解了我正在努力学习的一些概念.

语言是Java.

从我到目前为止所理解的,在X86架构上,StoreLoad障碍(尽管用于实现它们的确切的CPU指令)是在Volatile写入之后放置的,以使其在其他线程中的后续易失性读取中可见(因为x86不保证较新的读取总是看到较旧的写入)(参考http://shipilev.net/blog/2014/on-the-fence-with-dependencies/)

现在从这里(http://jpbempel.blogspot.it/2013/05/volatile-and-memory-barriers.html)我看到:

public class TestJIT
{
    private volatile static int field1;
    private static int field2;
    private static int field3;
    private static int field4;
    private static int field5;
    private volatile static int field6;

    private static void assign(int i)
    {
        field1 = i << 1; // volatile
        field2 = i << 2;
        field3 = i << 3;
        field4 = i << 4;
        field5 = i << 5;
        field6 = i << 6; // volatile.
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java multithreading volatile memory-barriers

5
推荐指数
2
解决办法
346
查看次数

标签 统计

java ×1

memory-barriers ×1

multithreading ×1

volatile ×1