/** * @param meta Meta pointer. * @param oldValPtr Old first value pointer. * @param newValPtr New first value pointer. * @return {@code true} If operation succeeded. */ private boolean casValue(long meta, long oldValPtr, long newValPtr) { return mem.casLong(meta + 8, oldValPtr, newValPtr); }
/** * @param ptr Pointer. * @param qAddr Queue address. * @param mem Memory. * @return {@code True} if changed to zero. */ static boolean clearQueueAddress(long ptr, long qAddr, GridUnsafeMemory mem) { return mem.casLong(ptr + HEADER_QUEUE_ADDR_OFF, qAddr, 0); }
/** * @param meta Meta pointer. * @param oldValPtr Old value. * @param newValPtr New value. * @return {@code true} If succeeded. */ private boolean casValue(long meta, long oldValPtr, long newValPtr) { return mem.casLong(meta + 16, oldValPtr, newValPtr); }
/** * @param meta Meta pointer. * @param level Level. * @param oldNext Old next meta pointer. * @param newNext New next meta pointer. * @return {@code true} If operation succeeded. */ private boolean casNextMeta(long meta, int level, long oldNext, long newNext) { assert meta > 0 : meta; return mem.casLong(meta + 24 + 8 * level, oldNext, newNext); }
/** * @throws Exception If failed. */ @Test public void testLong() throws Exception { GridUnsafeMemory mem = new GridUnsafeMemory(64); int size = 32; long addr = mem.allocate(size); try { long l1 = 123456; mem.writeLong(addr, l1); long l2 = mem.readLong(addr); assertEquals(l1, l2); long l3 = 654321; mem.writeLongVolatile(addr, l3); long l4 = 666666; assertTrue(mem.casLong(addr, l3, l4)); assertFalse(mem.casLong(addr, l3, 0)); assertEquals(l4, mem.readLongVolatile(addr)); } finally { mem.release(addr, size); } }
/** * @param ptr Pointer. * @param qAddr Queue address. * @param mem Memory. * @return {@code True} if changed to zero. */ static boolean clearQueueAddress(long ptr, long qAddr, GridUnsafeMemory mem) { return mem.casLong(ptr + HEADER_QUEUE_ADDR_OFF, qAddr, 0); }