【发布时间】:2018-05-25 07:52:58
【问题描述】:
您能解释一下为什么会发生这种死锁吗?
package main
import (
"sync"
"fmt"
"runtime"
)
func main() {
m := sync.RWMutex{}
go func(){
m.RLock()
runtime.Gosched()
m.RLock()
m.RUnlock()
m.RUnlock()
}()
runtime.Gosched()
m.Lock()
m.Unlock()
fmt.Println("works")
}
我不明白为什么这种死锁总是 大多会发生。 这可能是调度程序的怪癖吗?
【问题讨论】:
-
这并不总是发生。你的说法没有证据。我试过了,并且能够“挤压”它打印
"works"的运行。这个问题原样似乎不是很周到。附言Go Playground 缓存输出并且不再运行代码。我在本地测试过。
标签: go synchronization