Go之路(十五):包-锁
包-锁
例子:
package main import( "fmt" "sync" "time" "sync/atomic" ) var hclock sync.RWMutex var count int32 // func write(b map[int]string,i int){ // hclock.Lock() // b[i] = "aaaaaa" // hclock.Unlock() // } func main() { a := make(map[int]string) a[0] = "z" a[1] = "a" a[2] = "b" a[3] = "c" for i:=0; i< 1; i++{ // go write(a,i) go func(b map[int]string){ hclock.Lock() b[i] = "aaa" hclock.Unlock() }(a) } for i := 0; i<=100 ; i++{ go func(a map[int]string){ for{ hclock.RLock() // fmt.Println(a) time.Sleep(time.Millisecond) hclock.RUnlock() atomic.AddInt32(&count,1) } }(a) } time.Sleep(time.Second*3) fmt.Println(atomic.LoadInt32(&count)) }
主要是互斥锁和读写互斥锁