Is this atomic code correct?

BCS none at anon.com
Tue Mar 17 13:49:54 PDT 2009


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?




More information about the Digitalmars-d-learn mailing list