golang之包和锁的机制
package mainimport (
"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]