Не могли бы вы объяснить, почему происходит этот тупик?
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")
}
Для меня не очевидно, почему этот тупик всегда в основном случается. Может ли это быть причудой планировщика?