code: func (rw *BoundedRWLock) processQueue() {
  
  	if rw.readers != 0 {
  		panic("readers??")
  	}
  
  	if rw.nextWriter != nil {
  		if rw.nextWriter.WakeAtomic() {
  			return
  		}
  		rw.nextWriter = nil
  	}
  
  	for {
  		var next *rwwait
  		select {
  		case next = <-rw.waiters:
  		default:
  			return
  		}
  		if next.writer {
  			// No readers scheduled yet?
  			if rw.readers == 0 {
  				// If they wake up, no one else gets to go
  				if next.WakeAtomic() {
  					rw.nextWriter = next
  					return
  				}
  			} else {
  				rw.nextWriter = next
  				return
  			}
  		} else {
  			// Reader?  Let them enter now.
  			if next.WakeAtomic() {
  				rw.readers++
  			}
  		}
  	}
  }
docs: // Walks the queue of eligible waiters (if any) and wakes them (if they're not
  // timed out).
  //
  // Any writer "stops" the walk of the queue.