我們先寫一段**
func main()這段**很簡單,就是模擬兩個人使用1個印表機}func printer(str string)
fmt.println()
}func person1()
func person2()
那麼現在是併發狀態使用印表機
結果我們會發現
出現了whoerlllod這樣併發列印的效果
然後我們需要想乙個辦法
使得我們的person1和person2有乙個同步的狀態
就是person1列印完成了再列印person2
這時候我們就需要使用到channel了
我們要定義乙個成員變數
var channel = make(chan int)這裡的<-channel意思是func main()
}func printer(str string)
fmt.println()
}func person1()
func person2()
在channel收到資料之前,這裡就是阻塞的
channel<- 1實際上就是發了乙個1這個資訊
這樣person2中就收到了乙個1
那麼這裡的子協程就不阻塞了,就可以進行列印了
所以channel就是通過傳遞資訊這樣的方式
來實現同步
當然資料也可以支援其他的格式
比如string
var channel = make(chan string)func main()
}func printer(str string)
fmt.println()
}func person1()
func person2()
golang中chan型別的位址
chan型別本是就是指標,因此直接列印即可,不需要再取位址.如果在取位址就是 指向指標的指標 pointer to pointer 即類似c c 中的二級指標 如 int a int p a int pp p 其中pp就是二級指標 package main import fmt func main ...
golang中併發sync和channel
golang中實現併發非常簡單,只需在需要併發的函式前面新增關鍵字 go 但是如何處理go併發機制中不同goroutine之間的同步與通訊,golang 中提供了sync包和channel機制來解決這一問題 sync 包提供了互斥鎖這類的基本的同步原語.除 once 和 waitgroup 之外的型...
golang中併發sync和channel
golang中實現併發非常簡單,只需在需要併發的函式前面新增關鍵字 go 但是如何處理go併發機制中不同goroutine之間的同步與通訊,golang 中提供了sync包和channel機制來解決這一問題 sync 包提供了互斥鎖這類的基本的同步原語.除 once 和 waitgroup 之外的型...