func AddUint64(val *uint64, delta uint64) (new uint64) { runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(val)) *val = *val + delta new = *val runtime.RaceReleaseMerge(unsafe.Pointer(val)) runtime.RaceSemrelease(&mtx) return }
func SwapPointer(addr *unsafe.Pointer, new unsafe.Pointer) (old unsafe.Pointer) { _ = *addr runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) runtime.RaceAcquire(unsafe.Pointer(addr)) old = *addr *addr = new runtime.RaceReleaseMerge(unsafe.Pointer(addr)) runtime.RaceSemrelease(&mtx) return }
func CompareAndSwapUintptr(val *uintptr, old, new uintptr) (swapped bool) { swapped = false runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(val)) if *val == old { *val = new swapped = true runtime.RaceReleaseMerge(unsafe.Pointer(val)) } runtime.RaceSemrelease(&mtx) return }
func raceReleaseMerge(addr unsafe.Pointer) { runtime.RaceReleaseMerge(addr) }