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))

	
}

  主要是互斥锁和读写互斥锁

 

posted @ 2018-12-03 15:28  __Miracle  阅读(87)  评论(0编辑  收藏  举报