code: func (s *Sleeper) AddWaker(w *Waker, id int) {
  	// Add the waker to the list of all wakers.
  	w.allWakersNext = s.allWakers
  	s.allWakers = w
  	w.id = id
  
  	// Try to associate the waker with the sleeper. If it's already
  	// asserted, we simply enqueue it in the "ready" list.
  	for {
  		p := (*Sleeper)(atomic.LoadPointer(&w.s))
  		if p == &assertedSleeper {
  			s.enqueueAssertedWaker(w)
  			return
  		}
  
  		if atomic.CompareAndSwapPointer(&w.s, usleeper(p), usleeper(s)) {
  			return
  		}
  	}
  }
docs: // AddWaker associates the given waker to the sleeper. id is the value to be
  // returned when the sleeper is woken by the given waker.