Go Synchronization

July 16, 2019

*sync.Mutex

    m := sync.Mutex
    
    m.Lock() // for locking
    m.Unlock() // for unlocking

sync.RWMutex

    m := sync.RWMutex
    
    // Read lock & Read unlock.
    m.RLock()
    m.RUnlock()
    
    // for Write locks & write unlocks
    m.Lock()
    m.Unlock()

sync.WaitGroup

e.g.

func main() {
    var wg sync.WaitGroup
    
    wg.Add(1)
    go func() {
        fmt.Println("Inside my goroutine")
        wg.Done()
    }()
    wg.Wait()

    fmt.Println("Finished Execution") 
}