GoClub Pro

Go-并发

最近更新:2026-10-24
本页是手写/批注类笔记,直接按原始笔记截图呈现(转成文字会乱序);原始笔记文件见「Go语言相关笔记」页的原始链接。
onenote-go-concurrency 原始笔记截图 1 onenote-go-concurrency 原始笔记截图 2 onenote-go-concurrency 原始笔记截图 3 onenote-go-concurrency 原始笔记截图 4
转换文字版(供搜索 / 复制)




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")

}


 

 

笔记图片
笔记图片

笔记图片

笔记图片
笔记图片







 

内容反馈

发现错误或想补充内容?

GoClub Pro 是静态知识库,评论功能不再加载第三方脚本。你可以在 GitHub 仓库提交 Issue,反馈会直接进入项目协作流程。

提交 GitHub 反馈