package main

import (
    "fmt"
    "sync"
    "time"
)

// 协程计数器
var wg sync.WaitGroup
var rwLock sync.RWMutex // 读写锁
var sum int

func main() {
    fmt.Println("嘻嘻")
    sum = 666
    wg.Add(6)

    for i := 0; i < 5; i++ {
        go func() {
            defer wg.Done()

            rwLock.RLock()// 加读锁
            fmt.Println(sum)
            rwLock.RUnlock()// 解读锁
        }()
    }


    go func() {
        defer wg.Done()

        rwLock.Lock()// 加锁
        fmt.Println("修改数据")
        sum += 222
        time.Sleep(time.Second*6)
        fmt.Println("修改完成")
        rwLock.Unlock()// 解锁
    }()

    wg.Wait() // 等待所有的协程执行完毕
}