猿问

如何在Go中使用频道代替互斥体?

通道将通信(值的交换)与同步相结合,以确保两个计算(goroutines)处于已知状态。


如何使用Google Go中的频道执行互斥功能?


package main


import "sync"


var global int = 0

var m sync.Mutex


func thread1(){

    m.Lock()

    global = 1

    m.Unlock()

}


func thread2(){

    m.Lock()

    global = 2

    m.Unlock()

}


func main(){

   go thread1()

   go thread2()

}


神不在的星期二
浏览 218回答 2
2回答

慕神8447489

使用通道作为互斥对象的示例:package mainvar global int = 0var c = make(chan int, 1)func thread1(){&nbsp; &nbsp; <-c // Grab the ticket&nbsp; &nbsp; global = 1&nbsp; &nbsp; c <- 1 // Give it back}func thread2(){&nbsp; &nbsp; <-c&nbsp; &nbsp; global = 2&nbsp; &nbsp; c <- 1}func main() {&nbsp; &nbsp;c <- 1 // Put the initial value into the channel&nbsp; &nbsp;go thread1()&nbsp; &nbsp;go thread2()}您也可以使用chan struct{}而不是chan int减小内存大小。输入的值是struct{}{}(typestruct{}和一个空的content {})。有关示例,请参见Ivan black的评论。
随时随地看视频慕课网APP

相关分类

Go
我要回答