golang併發程式設計 01

2021-09-07 08:07:04 字數 1165 閱讀 9324

一、併發程式設計模板

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的發展帶...