代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"math/rand"
"sync"
"time"
"sync/atomic"
)
var lock sync.Mutex
var rwlock sync.RWMutex
func testSync() { //互斥锁
var a map[int]int
a = make(map[int]int)
a[2] = 2 * 2
a[3] = 3 * 3
a[4] = 4 * 4
a[5] = 5 * 5
for i := 0; i < 2; i++ {
go func(b map[int]int) {
lock.Lock()
b[2] = rand.Intn(100)
fmt.Println(b)
lock.Unlock()
}(a)
}
time.Sleep(time.Second)
}
func testRWlock() {//读写锁的性能比互斥锁好上100倍,
//读多写少的情况的用读写锁,可以有多个线程读,只有一个线程写
var a map[int]int
a = make(map[int]int)
a[2] = 2 * 2
a[3] = 3 * 3
a[4] = 4 * 4
a[5] = 5 * 5
for i := 0; i < 2; i++ {
go func(b map[int]int) {
rwlock.Lock()
b[2] = rand.Intn(100)
time.Sleep(10*time.Millisecond)
rwlock.Unlock()
}(a)
}
var count int32
for i := 0; i < 100; i++ {
go func(b map[int]int) {
for{
// lock.Lock()
rwlock.RLock()
time.Sleep(time.Millisecond)
// fmt.Println(b)
rwlock.RUnlock()
// lock.Unlock()
atomic.AddInt32(&count,1)
}
}(a)
}
time.Sleep(time.Second*2)
fmt.Println(atomic.LoadInt32(&count))
}
func main() {
// testSync()
testRWlock()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。