一道经典的Go语言面视题
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
题目
// 分别开启三个go协程协程中循环输出 gua wang miao
// 在元音字母 a, u, i ,输出总数达到50 个以后停止输出。
解答
`
package main
import (
"fmt"
"sync"
)
const LIMIT int = 50
var count int = LIMIT
var wgFlag sync.WaitGroup
var lock sync.Mutex
func main() {
fmt.Println("Hello, world")
wgFlag.Add(3)
go Bird()
go Dog()
go Cat()
wgFlag.Wait()
fmt.Println("Exit.count=",count)
}
func Bird() {
defer wgFlag.Done()
for true{
lock.Lock()
if count>=2{
fmt.Println("Gua")
count -= 2
lock.Unlock()
} else {
lock.Unlock()
break
}
}
}
func Dog() {
defer wgFlag.Done()
for true{
lock.Lock()
if count>=1{
fmt.Println("Wang")
count -= 1
lock.Unlock()
} else {
lock.Unlock()
break
}
}
}
func Cat() {
defer wgFlag.Done()
for true{
lock.Lock()
if count>=2{
fmt.Println("Miao")
count -= 2
lock.Unlock()
} else {
lock.Unlock()
break
}
}
}
`