package main

import (
	"fmt"
	"runtime"
	"sync"
)

func main() {
	// wg用来等待程序完成
	var wg sync.WaitGroup

	// 分配一个逻辑处理器给调度器使用
	runtime.GOMAXPROCS(2)

	// 计数加2，表示要等待两个goroutine
	wg.Add(2)
	func() {
		fmt.Println("hello")
	}()

	// 创建两个goroutine
	fmt.Println("Create Goroutines")
	go printPrime("A", &wg)
	go printPrime("B", &wg)

	// 等待goroutine结束
	fmt.Println("Waiting To Finish")
	wg.Wait()

	fmt.Println("Terminating Program")
}

// printPrime 显示5000以内的素数值
func printPrime(prefix string, wg *sync.WaitGroup) {
	// 在函数退出时调用Done来通知main函数工作已经完成
	defer wg.Done()

next:
	for outer := 2; outer < 5000; outer++ {
		for inner := 2; inner < outer; inner++ {
			if outer%inner == 0 {
				continue next
			}
		}
		fmt.Printf("%s:%d\n", prefix, outer)
	}
	fmt.Println("Completed", prefix)
}
