1. 程式人生 > 實用技巧 >Go併發

Go併發

1.WaitGroup等待當前執行的協程

package main

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

// Go語言的併發指的是能讓某個函式獨立於其他函式執行的能力
// Go的排程器是在作業系統之上的
//Go的併發同步模型來自一個叫做通訊順序程序(CSP)的東西
//同步和傳遞資料的關鍵資料型別是通道
func main() {
	// 分配一個邏輯處理器給排程器使用
	runtime.GOMAXPROCS(1)

	//wg用來等待程式完成
	//計數加2,表示要等待2個goroutine
	var wg sync.WaitGroup
	wg.Add(2)
	fmt.Println("Start Goroutines")

	//宣告一個匿名函式,建立一個goroutine
	go func() {
		// 在函式退出時呼叫Done來同志main函式工作已經完成
		defer wg.Done()
		for count := 0; count < 3; count++ {
			for char := 'a'; char < 'a'+26; char++ {
				fmt.Printf("%c ", char)
			}
		}

	}()

	go func(){
		defer wg.Done()
		for count := 0; count < 3; count++ {
			for char := 'A'; char < 'A'+26; char++ {
				fmt.Printf("%c ", char)
			}
		}

	}()

	//等待goroutine結束
	fmt.Println("Waiting To Finish")
	wg.Wait()
	fmt.Println("\nTerminating Program")
}