public void EnterReadLock() { ClientSpinWait sw = new ClientSpinWait(); do { while ((rwlock & (RwWrite | RwWait)) > 0) { sw.SpinOnce(); } if ((ClientInterlocked.Add(ref rwlock, RwRead) & (RwWait | RwWait)) == 0) { return; } ClientInterlocked.Add(ref rwlock, -RwRead); } while (true); }
public void ExitWriteLock() { ClientInterlocked.Add(ref rwlock, -RwWrite); }
public void ExitReadLock() { ClientInterlocked.Add(ref rwlock, -RwRead); }