您好,登錄后才能下訂單哦!
goroutine運行在相同的地址空間,因此訪問共享內存必須做好同步。goroutine 奉行通過通信來共享內存,而不是共享內存來通信。
引?類型 channel 是 CSP 模式的具體實現,用于多個 goroutine 通訊。其內部實現了同步,確保并發安全。
和map類似,channel也一個對應make創建的底層數據結構的引用。
當我們復制一個channel或用于函數參數傳遞時,我們只是拷貝了一個channel引用,因此調用者何被調用者將引用同一個channel對象。和其它的引用類型一樣,channel的零值也是nil。
定義一個channel時,也需要定義發送到channel的值的類型。channel可以使用內置的make()函數來創建:
make(chan Type) //等價于make(chan Type, 0)
make(chan Type, capacity)
當 capacity= 0 時,channel 是無緩沖阻塞讀寫的,當capacity> 0 時,channel 有緩沖、是非阻塞的,直到寫滿 capacity個元素才阻塞寫入。
channel通過操作符<-來接收和發送數據,發送和接收數據語法:
channel <- value //發送value到channel
<-channel //接收并將其丟棄
x := <-channel //從channel中接收數據,并賦值給x
x, ok := <-channel //功能同上,同時檢查通道是否已關閉或者是否為空
默認情況下,channel接收和發送數據都是阻塞的,除非另一端已經準備好,這樣就使得goroutine同步變的更加的簡單,而不需要顯式的lock。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。