System.Threading.ServerSimpleRwLock.EnterWriteLock C# (CSharp) Method

EnterWriteLock() public method

public EnterWriteLock ( ) : void
return void
        public void EnterWriteLock()
        {
            ServerSpinWait sw = new ServerSpinWait();
              do {
            int state = rwlock;
            if (state < RwWrite) {
              if (Interlocked.CompareExchange(ref rwlock, RwWrite, state) == state)
            return;
              state = rwlock;
            }
            // We register our interest in taking the Write lock (if upgradeable it's already done)
            while ((state & RwWait) == 0 && Interlocked.CompareExchange(ref rwlock, state | RwWait, state) != state)
              state = rwlock;
            // Before falling to sleep
            while (rwlock > RwWait)
              sw.SpinOnce();
              } while (true);
        }