package main
import (
"fmt"
"runtime"
"strconv"
"time"
)
func test() {
for i := 1; i < 10; i++ {
fmt.Println("hello.main" + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
func main() {
/*go test()
for i := 1; i < 10; i++ {
fmt.Println("hello.go" + strconv.Itoa(i))
time.Sleep(time.Second)
}*/
cpuNum := runtime.NumCPU()
fmt.Println("cpu=", cpuNum)
//可以设置自己使用CPU
runtime.GOMAXPROCS(cpuNum - 1)
fmt.Println("ok")
}
//互斥锁来避免资源抢占
package main
import (
"fmt"
"sync"
"time"
)
//1-200各个数的结成,并且把各个数放到map中。goroutine
var (
myMap = make(map[int]int, 10)
//声明一个全局的互斥锁
lock sync.Mutex
)
//test函数就是计算n! ,将这个结果放到map中
func test(n int) {
res := 1
for i := 1; i <= n; i++ {
res *= i
}
//这里我们将res放到map
lock.Lock()
myMap[n] = res
//解锁
lock.Unlock()
}
func main() {
//go build -race main.go
//Found 2 data race(s)
// 我们这里开启多个协程完成这个任务
for i := 1; i <= 200; i++ {
go test(i)
}
//这里我们遍历这个结果
time.Sleep(10 * time.Second)
lock.Lock()
for i, v := range myMap {
fmt.Printf("map[%d]=%d \n", i, v)
}
lock.Unlock()
}
go 并发锁初级文章
猜你喜欢
转载自blog.csdn.net/licanfeng1/article/details/132336653
今日推荐
周排行