sync.Cond — примитив для ожидания условия. Горутина может заснуть (Wait) пока другая не разбудит её (Signal — одну, Broadcast — все). Пример: producer добавил элемент в очередь и вызвал cond.Signal(), consumer спал на cond.Wait() и проснулся. Без Cond пришлось бы крутить busy loop или использовать каналы. На практике каналы в Go удобнее для большинства случаев. Cond нужен когда несколько горутин ждут одно условие и нужен Broadcast.