Фон: Я пытаюсь реализовать логику, которая находит наименьшее положительное число, которое равномерно делится на все числа от 1 до 20. Я реализовал последовательную версию и получил ответ as 232792560.Исправить выполнение моих gotoutines
Вопрос: Когда я пытаюсь создать некоторый параллелизм по этой проблеме (см. незакомментированный блок кода), он запускается, но никогда не показывает никакого результата. Может ли кто-нибудь из вас вести меня туда, где я ошибаюсь?
Примечание: Я очень знаком с голангом; и я знаю, что это не самая лучшая проблема для параллелизма, поскольку нет гарантии, что у меня будет наименьшее положительное число в качестве первого результата. Однако я попробовал это из своего любопытства.
package main
import(
"fmt"
)
func divide(num int) bool {
for i := 1; i <= 20; i++ {
if num % i != 0 {
return false
}
}
return true
}
func main() {
num:=0
//simple function
/*for {
num++;
result := divide(num)
if result {
fmt.Println("Smallest number is: ", num)
break
}
}*/
//go-routine
//go-routine
var wg sync.WaitGroup
for {
num++;
wg.Add(1)
go func(x int) {
result := divide(x)
if result {
fmt.Println("Smallest number is: ", x)
defer wg.Done()
}
}(num)
}
wg.Wait()
fmt.Println("End.")
}
Надеюсь, также ясно, что подход с грубой силой - это не лучший способ решить проблему, одновременно или иначе. – Iridium