andrew4582

LockFreeUpdate

Jan 19th, 2011
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.36 KB | None | 0 0
  1. static void LockFreeUpdate<T> (ref T field, Func <T, T> updateFunction)
  2.   where T : class
  3. {
  4.   var spinWait = new SpinWait();
  5.   while (true)
  6.   {
  7.     T snapshot1 = field;
  8.     T calc = updateFunction (snapshot1);
  9.     T snapshot2 = Interlocked.CompareExchange (ref field, calc, snapshot1);
  10.     if (snapshot1 == snapshot2) return;
  11.     spinWait.SpinOnce();
  12.   }
  13. }
Add Comment
Please, Sign In to add comment