Race Condition相信大家或多或少都有聽過.
今天請油達大師與玉面飛鷹來示範一下Race Condition.
// hello74
package main
import (
	"fmt"
	"runtime"
	"sync"
)
var (
	九陰真經 string
	wg   sync.WaitGroup
)
func 油達大師() {
	defer wg.Done()
	// 第一次取值並寫回
	context := 九陰真經
	runtime.Gosched()
	context += " 拜師油達"
	九陰真經 = context
	// 第二次取值並寫回
	context = 九陰真經
	runtime.Gosched()
	context += " 月繳300"
	九陰真經 = context
}
func 玉面飛鷹() {
	defer wg.Done()
	// 第一次取值並寫回
	context := 九陰真經
	runtime.Gosched()
	context += " 我也有教"
	九陰真經 = context
	// 第二次取值並寫回
	context = 九陰真經
	runtime.Gosched()
	context += " 只收200"
	九陰真經 = context
}
func main() {
	wg.Add(2)
	九陰真經 = "欲練此功"
	go 油達大師()
	go 玉面飛鷹()
	wg.Wait()
	fmt.Println("真經內容:", 九陰真經)
}
執行結果:
./hello74 
真經內容: 欲練此功 我也有教 只收200
雖然油達大師,也有寫回,但是好像無效.
九陰真經被玉面飛鷹寫了招生廣告了.
這就是Race Condition的現象.
為何會如此? 如何避免呢?
且待明日分解.