Ai
1 Star 0 Fork 0

叶明志/golang练习

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
main.go 1.19 KB
一键复制 编辑 原始数据 按行查看 历史
叶明志 提交于 2019-06-23 21:36 +08:00 . 互斥锁、读写锁的使用
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()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/yemingzhi/GolangLearnPractice1.git
git@gitee.com:yemingzhi/GolangLearnPractice1.git
yemingzhi
GolangLearnPractice1
golang练习
2bf136849dce

搜索帮助