Solution: Map Access
Let's look at the solution.
We'll cover the following...
Solution
Press + to interact
package mainimport ("fmt""math""sort""sync""time")var (mu sync.Mutex)func isPrime(num int) bool {for i := 2; i <= int(math.Sqrt(float64(num))); i++ {if int(num)%i == 0 {return false}}return true}func findPrimes(resultMap map[int]struct{}, startFrom, tryCount int) {for i := startFrom; i < startFrom+tryCount; i++ {if isPrime(i) {mu.Lock()resultMap[i] = struct{}{}mu.Unlock()}}}// print 10 smallest prime numbers foundfunc printSmallest(resultMap map[int]struct{}) {i := 0arr := make([]int, 0, len(resultMap))for p := range resultMap {arr = append(arr, p)}sort.Ints(arr)for _, p := range arr {fmt.Println(p)i++if i >= 10 {break}}}func main() {resultMap := make(map[int]struct{})for i := 0; i < 100; i++ {go findPrimes(resultMap, 99999*i+2, 1000)}time.Sleep(time.Second * 3)fmt.Printf("Found %v primes\n", len(resultMap))printSmallest(resultMap)}
Explanation
Concurrent writes to a map are not allowed, we can fix ...