code: func (q *Queue) Put(items ...interface{}) error {
  	if len(items) == 0 {
  		return nil
  	}
  
  	q.lock.Lock()
  
  	if q.disposed {
  		q.lock.Unlock()
  		return ErrDisposed
  	}
  
  	q.items = append(q.items, items...)
  	for {
  		sema := q.waiters.get()
  		if sema == nil {
  			break
  		}
  		sema.response.Add(1)
  		select {
  		case sema.ready <- true:
  			sema.response.Wait()
  		default:
  			// This semaphore timed out.
  		}
  		if len(q.items) == 0 {
  			break
  		}
  	}
  
  	q.lock.Unlock()
  	return nil
  }
docs: // Put will add the specified items to the queue.