iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
SideProject30

HOW TO GO系列 第 8

08. Goroutine & Channel (2)

  • 分享至 

  • xImage
  •  

競爭條件 (Race Condition)

定義:資料競爭發生於兩個 Goroutine 並行存取同一個變數且至少有一個寫入

並行只讀取執行順序不影響,但加上寫入時情況就不一樣。並行時不能保證 Goroutine 的執行順序,也因此程式開發者需要注意共用變數的問題。

互斥鎖 sync.Mutex

package main

import (
	"fmt"
	"sync"
)

func main() {
	var counter int
	var mutex sync.Mutex
	var wg sync.WaitGroup

	for i := 0; i < 1000; i++ {
		wg.Add(1)
		go func() {
			mutex.Lock()
			counter++
			mutex.Unlock()
			wg.Done()
		}()
	}
	// 等待所有 Goroutine 完成
	wg.Wait()
	fmt.Printf("Counter: %d\n", counter)
}

補充1. Concurrency in Go

GOBook/Concurrency in Go中文版.pdf


上一篇
07. Goroutine & Channel (1)
下一篇
09. 模組&套件 (Modules & Packages)
系列文
HOW TO GO30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言