Go-并发
本页是手写/批注类笔记,直接按原始笔记截图呈现(转成文字会乱序);原始笔记文件见「Go语言相关笔记」页的原始链接。

转换文字版(供搜索 / 复制)
package main
import (
"fmt"
"sync/atomic"
"time"
)
func main() {
sum := atomic.Int64{}
sum.Store(0)
for range 10 {
go func() {
for range 100000 {
sum.Add(1)
}
}()
}
time.Sleep(1 * time.Second)
fmt.Println(sum.Load())
}
package main
import (
"fmt"
"sync"
)
func main() {
init := sync.Once{}
num := 0
for range 10 {
init.Do(func() {
num ++
})
}
fmt.Println(num)
}
package main
import (
"sync"
"time"
)
func main() {
l := sync.Mutex{}
c := sync.NewCond(&l)
go func() {
// 调用 wait 前需要先加锁
c.L.Lock()
c.Wait()
println("Hello, world!")
// 调用 wait 后需要解锁
c.L.Unlock()
}()
time.Sleep(time.Second)
println("唤醒")
// Signal 方法唤醒等待的 goroutine
c.Signal()
time.Sleep(time.Second)
println("end")
}




