我不知道为什么在使用互斥锁时工作。c <- i
因为在函数的第一行有。rwMutex.Lock()
second()
如果在通道中不起作用,则无法理解以下输出值。
输出值按 1 的顺序排列。mutex
执行go second(...)
执行rwMutex.Lock()
所以不要运行,因为写入被锁定!c <- i
但正在工作。num := <-c
main.go
var (
dataSendChannel = make(chan int)
rwMutex = new(sync.RWMutex)
)
func main() {
go first(dataSendChannel)
time.Sleep(time.Second * 100)
}
func first(c chan<- int) {
for i := 1; i <= 10; i++ {
go second(dataSendChannel)
c <- i
}
}
func second(c <-chan int) {
rwMutex.Lock()
num := <-c
time.Sleep(time.Duration(10-num) * time.Second)
fmt.Println("[NUM] : ", num)
rwMutex.Unlock()
}
输出
[NUM] : 1
[NUM] : 2
[NUM] : 3
[NUM] : 4
[NUM] : 5
[NUM] : 6
[NUM] : 7
[NUM] : 8
[NUM] : 9
[NUM] : 10
这是不使用 时的输出值。mutex
main.go
func second(c <-chan int) {
num := <-c
time.Sleep(time.Duration(10-num) * time.Second)
fmt.Println("[NUM] : ", num)
}
输出
[NUM] : 10
[NUM] : 9
[NUM] : 8
[NUM] : 7
[NUM] : 6
[NUM] : 5
[NUM] : 4
[NUM] : 3
[NUM] : 2
[NUM] : 1
在通道上接收到一个数据后,互斥锁是否有效?
德玛西亚99
相关分类