Are 64 bit assignments in Java atomic on a 32 bit machine?

前端 未结 4 958
轮回少年
轮回少年 2020-12-02 16:12

If I have code like this -

long x;
x  = 0xFFFFFFFFL;


If i run this code on a 32 bit machine is it guaranteed to be atomic or is it po

4条回答
  •  我在风中等你
    2020-12-02 16:43

    If the variable is volatile, then the read/write is guaranteed atomic, but not if the variable is non-volatile.

    Some implementations may find it convenient to divide a single write action on a 64-bit long or double value into two write actions on adjacent 32 bit values. For efficiency's sake, this behavior is implementation specific; Java virtual machines are free to perform writes to long and double values atomically or in two parts.

    For the purposes of the Java programming language memory model, a single write to a non-volatile long or double value is treated as two separate writes: one to each 32-bit half. This can result in a situation where a thread sees the first 32 bits of a 64 bit value from one write, and the second 32 bits from another write. Writes and reads of volatile long and double values are always atomic.

    JLS 17.7 - Non-atomic Treatment of double and long

    When multiple threads are accessing a long value without synchronization, it is necessary to use volatile to ensure changes made by one thread are visible to other threads, and to ensure the read/write is atomic.

提交回复
热议问题