bobbai 发表于 2018-9-20 11:58:11

golang之包和锁的机制

package main  

  
import (
"fmt"  "math/rand"
  "sync"
  "sync/atomic"
  "time"
  
)
  

  
//读写锁
  
var rwLock sync.RWMutex
  
var lock sync.Mutex
  

  
func testRWLock() {
  var a mapint
  a = make(mapint, 5)
  var count int32
  a = 10
  a = 10
  a = 10
  a = 10
  a = 10
  for i := 0; i < 2; i++ {
  go func(b mapint) {
  //rwLock.Lock() //读写锁的代码
  lock.Lock() //互斥锁的代码
  b = rand.Intn(100)
  time.Sleep(10 * time.Microsecond) //微妙
  //rwLock.Unlock()
  lock.Unlock()
  

  }(a)
  }
  for i := 0; i < 100; i++ {
  go func(b mapint) {
  for {
  //rwLock.RLock() //读写锁的代码
  lock.Lock()
  time.Sleep(time.Millisecond)
  //rwLock.RUnlock()
  lock.Unlock()
  atomic.AddInt32(&count, 1)
  }
  }(a)
  }
  time.Sleep(time.Second * 20)
  fmt.Println(atomic.LoadInt32(&count))
  
}
  
func main() {
  //互斥锁
  
    testRWLock()
  //读多写少的时候,用读写锁
  
}


页: [1]
查看完整版本: golang之包和锁的机制