shared variable
use mutex
var mutex = sync.Mutex{}
mutex.lock()
do something
mutex.UnLock()
ony do once
var once = sync.Once{}
go once.Do(function_name)
waitGroup
var wg = sync.WaitGroup{}
func doSomething() {
wg.Add(1)
//do something
wg.Done()
}
func main() {
go doSomething()
go doSomething()
wg.Wait()
}
send message
var mutex = &sync.Mutex{}
var cond = sync.NewCond(mutex)
func doSomething() {
cond.L.Lock()
for true {
cond.Wait()
// do something
}
cond.L.Unlock()
}
func main() {
for i := 0; i < 100; i++ {
go incrNum()
}
// random goroutine
cond.Signal()
// all goroutine
cond.Broadcast()
}