novelWriter 场景结构实战:用三级标题、引用标记与拆分工具组织章节内的多场景
2026/10/6 18:43:21
在Go语言的并发编程中,同步和资源管理是至关重要的部分。下面将详细介绍Go语言中多种并发相关的技术和工具。
在等待Goroutine完成时,我们可以使用空结构体的通道来实现,示例代码如下:
ch := make(chan struct{}) for i := 0; i < n; n++ { go func() { // do something ch <- struct{}{} }() } for i := 0; i < n; n++ { <-ch }不过,这种方法语义上不太准确,因为通道主要用于通信,而这里只是发送空数据。更好的选择是使用sync.WaitGroup,它有一个计数器来表示等待的元素数量。其结构定义如下:
type WaitGroup struct { noCopy noCopy state1 [3]uint32 }noCopy字段防止结构体被值复制,state1数组中只有第一个和最后一个元素被使用,另一个用于编译器优化。WaitGroup提供了三个方法:
-Add:使用给定值改变计数器,值可以为负,若计数器小于零,应用会