sync.WaitGroup

Share memory by communicating, don’t communicate by sharing memory

sync.Cond

Cond implements a conditional variable that can be used in scenarios where multiple Readers are waiting for a shared resource ready (if there is only one read and one write, a lock or Go Channel takes care of it).