一、併發程式設計模板
func main() ()
wg.add(1)
go func() ()
wg.wait()
}
二、鎖住共享資源
1. 原子函式
var counter int64 //多個goroutine都會增加其值的變數
//如果在goroutine中要對counter執行加法,那麼要用原子操作
atomic.addint64(&counter, 1) //對counter加1
另外兩個有用的原子函式是 loadint64 和 storeint64.
2. 互斥鎖
互斥鎖用於在**上建立乙個臨界區,保證同一時間只有乙個 goroutine 可以執行這個臨界區**。
var (
mutex sync.mutex //定義一把互斥鎖
counter int //多個goroutine要操作的變數
)mutex.lock()
mutex.unlock()
三、通道channel
當乙個資源需要在 goroutine 之間共享時,通道在 goroutine 之間架起了乙個管道,並提供了確保同步交換資料的機制。
1. 建立通道
//無緩衝的整形通道
unbufchan := make(chan int)
//有緩衝的字串通道,通道大小是10個字串
bufchan := make(chan string, 10)
2. 通道讀寫
bufchan := make(chan string, 10)
//向通道傳送值
bufchan <- "hello"
//從通道取
value := <- bufchan
3. 無緩衝chan與有緩衝的區別
無緩衝chan是同步的,有緩衝chan是非同步的。
Golang 併發程式設計
目錄傳送者 通道 有可能有資料阻塞 接受者 package main import fmt time func main time.sleep 2 time.second 主協程取資料 for i 0 i 3 i fmt.println 主協程結束 傳送者 通道 資料 資料 接受者 func mai...
Golang 併發程式設計
目錄傳送者 通道 有可能有資料阻塞 接受者 package main import fmt time func main time.sleep 2 time.second 主協程取資料 for i 0 i 3 i fmt.println 主協程結束 傳送者 通道 資料 資料 接受者 func mai...
golang併發程式設計
在早期,cpu都是以單核的形式順序執行機器指令。c語言 php正是這種順序程式語言的代表,即所有的指令都是以序列的方式執行,在相同的時刻有且僅有乙個cpu在順序執行程式的指令。隨著處理器技術的發展,單核時代以提公升處理器頻率來提高執行效率的方式遇到了瓶頸。單核cpu的發展的停滯,給多核cpu的發展帶...