通道將通信(值的交換)與同步相結(jié)合,以確保兩個(gè)計(jì)算(goroutines)處于已知狀態(tài)。如何使用Google Go中的頻道執(zhí)行互斥功能?package mainimport "sync"var global int = 0var m sync.Mutexfunc thread1(){ m.Lock() global = 1 m.Unlock()}func thread2(){ m.Lock() global = 2 m.Unlock()}func main(){ go thread1() go thread2()}
2 回答

慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
使用通道作為互斥對(duì)象的示例:
package main
var global int = 0
var c = make(chan int, 1)
func thread1(){
<-c // Grab the ticket
global = 1
c <- 1 // Give it back
}
func thread2(){
<-c
global = 2
c <- 1
}
func main() {
c <- 1 // Put the initial value into the channel
go thread1()
go thread2()
}
您也可以使用chan struct{}而不是chan int減小內(nèi)存大小。輸入的值是struct{}{}(typestruct{}和一個(gè)空的content {})。有關(guān)示例,請(qǐng)參見(jiàn)Ivan black的評(píng)論。
- 2 回答
- 0 關(guān)注
- 246 瀏覽
添加回答
舉報(bào)
0/150
提交
取消