Go实现简单的并发控制,使用四个goroutine轮流打印"张三""李四""王五""赵六" 需要顺序打印 共打印一百次"张3""李4"....
时间: 2023-07-17 12:56:07 浏览: 84
可以使用channel来实现简单的并发控制。以下是一个示例代码,实现了四个goroutine轮流打印指定的字符串一百次:
```go
package main
import (
"fmt"
"sync"
)
func main() {
ch := make(chan struct{})
var wg sync.WaitGroup
wg.Add(4)
go printName("张三", ch, &wg)
go printName("李四", ch, &wg)
go printName("王五", ch, &wg)
go printName("赵六", ch, &wg)
close(ch)
wg.Wait()
}
func printName(name string, ch <-chan struct{}, wg *sync.WaitGroup) {
for i := 0; i < 100; i++ {
<-ch
fmt.Println(name)
ch <- struct{}{}
}
wg.Done()
}
```
在主函数中,我们创建了一个无缓冲的channel `ch`,用于控制goroutine的并发执行。然后,我们创建了四个goroutine,并分别传入不同的名字和相同的channel和wait group。
在`printName`函数中,每个goroutine通过从channel中接收一个信号来获取执行权限。然后打印对应的名字,并将信号重新发送到channel中,以便下一个goroutine获取执行权限。
最后,在主函数中我们关闭了channel,并使用`WaitGroup`等待所有goroutine执行完毕。
这样就实现了四个goroutine轮流打印指定的字符串一百次,并且保证了顺序打印。
阅读全文