天天看點

一道經典的Go語言面視題

題目:

// 分别開啟三個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

}

}

}

`

繼續閱讀