需求是判断p是否满足p=a^2+b^2+c^2
package main
import (
"fmt"
"math"
)
func abcasync(p int) bool {
na := int(math.Sqrt(float64(p))) + 2
channel := make(chan bool)
for a := 0; a < na; a++ {
for b := 0; b < na; b++ {
go func() {
for c := 0; c < na; c++ {
if a*a+b*b+c*c == p {
channel <- true
}
}
}()
}
}
return <-channel
}
func main() {
// d := abcasync(41)
d := abcasync(23)
fmt.Println(d)
}
这里要求,一旦满足if条件,就退出程序,以避免浪费计算时间,否则就要遍历所有的情况。那么,如何判断所有的协程都执行完了呢?
会报错,请教如何解决?
应该能满足你的需求,中间beak判断没有使用atomic。使用chan,找不到的情况下会死锁啊哥哥...还有很多重复计算...