golang线程同步代码


在Go语言中,可以使用`sync`包中的`WaitGroup`来实现线程同步。以下是一个简单的示例: ```go package main import ( "fmt" "sync" "time" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() // 当函数执行完毕时,调用Done方法,通知WaitGroup已完成一个任务 fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) // 模拟耗时操作 fmt.Printf("Worker %d done\n", id) } func main() { var wg sync.WaitGroup // 创建一个WaitGroup实例 for i := 1; i <= 5; i++ { wg.Add(1) // 为每个worker添加一个计数器 go worker(i, &wg) // 启动一个新的goroutine来执行worker函数 } wg.Wait() // 等待所有worker完成 fmt.Println("All workers done") } ``` 在这个示例中,我们创建了一个`WaitGroup`实例,并为每个worker添加了一个计数器。当worker函数执行完毕时,它会调用`Done`方法,通知`WaitGroup`已完成一个任务。`main`函数中的`wg.Wait()`会阻塞,直到所有worker都调用了`Done`方法。这样,我们就可以确保所有worker都完成了它们的任务,然后再继续执行后续的代码。 [2024-07-23 13:42:25 | AI写代码神器 | 346点数解答]
- 作为python开发,简述下面几个概念:同步,异步,阻塞,非阻塞?(263点数解答 | 2023-11-08 00:56:38)172
- 作为golang开发,golang 中 make 和 new 的区别?(346点数解答 | 2023-11-09 18:10:41)299
- 作为golang开发,简述 golang 数组和切片的区别?(270点数解答 | 2023-11-09 18:10:41)195
- 作为golang开发,golang 单引号,双引号,反引号的区别?(214点数解答 | 2023-11-09 18:10:50)222
- 作为golang开发,golang 调用函数传入结构体时,应该传值还是指针?(478点数解答 | 2023-11-09 18:12:10)182
- 作为golang开发,golang sync.map 的用法?(408点数解答 | 2023-11-09 18:12:12)201
- 作为golang开发,golang 中解析 tag 是怎么实现的?(456点数解答 | 2023-11-09 18:12:12)192
- 作为golang开发,golang map 使用注意的点,是否并发安全?(396点数解答 | 2023-11-09 18:14:06)182
- 作为golang开发,golang uint 类型溢出问题?(539点数解答 | 2023-11-09 18:14:06)237
- 作为golang开发,golang 的 gc的触发条件?(285点数解答 | 2023-11-09 18:15:01)146
- 作为golang开发,简述 golang 记录日志的实现方式 ?(439点数解答 | 2023-11-09 18:16:36)183
- 作为golang开发,golang 如何打包到docker运行 ?(477点数解答 | 2023-11-09 18:16:38)158