x = min(x,y); Being the abstraction addict I am, I went for the general solution and came up with this:
void AtomicEvalAssign(T)(ref T to, lazy T from) { T old; do { old = atomicLoad(to); } while(!atomicStoreIf(to, from(), old)); } AtomicEvalAssign(x, min(x,y)); My question is; will that work or might the lazy arg not refetch the value?