public bool Arrive () { int old; int c; CSnziState s; do { old = root; Decode (old, out c, out s); if (c == 0 && s == CSnziState.Closed) return false; } while (Interlocked.CompareExchange (ref root, Encode (c + 1, s), old) != old); return true; }