6 ms·
Even with volatile it’s a load and then a store no? It may not be undefined behaviour, but I don’t think it will be atomic.
by wmanley 11mo ago
Even with volatile it’s a load and then a store no? It may not be undefined behaviour, but I don’t think it will be atomic.
- diek 11mo agoYou're correct. If you have: public int someField; public void inc() { someField += 1; } that still compiles down to: GETFIELD [someField] ICONST_1 IADD PUTFIELD [somefield] whether 'someField' is volatile or not. The volatile just affects the load/store semantics of the GETFIELD/PUTFIELD ops. For atomic increment you have to go through something like AtomicInteger that will internally use an Unsafe instance to ensure it emits a platform-specific atomic increment instruction.