多个goroutine按既定顺序运行
2020-10-1
| 2023-7-17
字数 157阅读时长≈ 1 分钟
type
status
date
slug
summary
tags
category
icon
password
Golang 中 goroutine 中的运行是无序的,如果要让多个 goroutine 顺序执行,例如每个 goroutine 在并行执行时顺序打印 0-9,这里记录一种通过 atomic 包的原子操作来实现的方法。
package main import ( "fmt" "sync/atomic" "time" ) func ParallelPrintOrderdNum() { var count uint32 trigger := func(i uint32, fn func()) { for { if n := atomic.LoadUint32(&count); n == i { fn() atomic.AddUint32(&count, 1) break } // sleep 等代,让此 goroutine 有被调度的机会 time.Sleep(time.Nanosecond) } } for i := uint32(0); i < 10; i++ { go func(i uint32) { fn := func() { fmt.Println(i) } trigger(i, fn) }(i) } // 主 goroutine 也需要等待 trigger(10, func() {}) } func main() { ParallelPrintOrderdNum() }
  • Golang 基础
  • range 数组和切片的差异别名和类型再定义
    Loading...
    目录