Also prevents update goroutines from piling up if they are delayed by adding a semaphore in startUpdate().