1. 程式人生 > >go語音之進階篇多任務資源競爭問題

go語音之進階篇多任務資源競爭問題

light 循環 str 定義 問題 pac 分享 ring alt

1、多任務資源競爭問題

示例:

package main

import (
	"fmt"
	"time"
)

//定義一個打印機,參數為字符串,按每個字符打印
//打印機屬於公共資源
func Printer(str string) {
	for _, data := range str {
		fmt.Printf("%c", data)
		time.Sleep(time.Second)
	}
	fmt.Printf("\n")
}

func person1() {
	Printer("hello")
}

func person2() {
	Printer("world")
}

func main() {
	//新建2個協程,代表2個人,2個人同時使用打印機
	go person1()
	go person2()

	//特地不讓主協程結束,死循環
	for {

	}
}  

執行結果:

hweorllldo

程序執行過程: 一人打印一個字符,這樣就亂了。

技術分享圖片

go語音之進階篇多任務資源競爭問題