I find my self in need of some thread safe, lock free code to update a value by way of a self referential expression

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?


Reply via email to