code: func (m *CPUMiner) Start() {
  	m.Lock()
  	defer m.Unlock()
  
  	// Nothing to do if the miner is already running or if running in
  	// discrete mode (using GenerateNBlocks).
  	if m.started || m.discreteMining {
  		return
  	}
  
  	m.quit = make(chan struct{})
  	m.speedMonitorQuit = make(chan struct{})
  	m.wg.Add(2)
  	go m.speedMonitor()
  	go m.miningWorkerController()
  
  	m.started = true
  	log.Infof("CPU miner started")
  }
docs: // Start begins the CPU mining process as well as the speed monitor used to
  // track hashing metrics.  Calling this function when the CPU miner has
  // already been started will have no effect.
  //
  // This function is safe for concurrent access.