Ich versuche herauszufinden, was das ist, hängt mein Programm hängen, die meisten meiner Schlösser sollten nicht für mehr als 200 ms gehalten werden. (eigentlich viel weniger!)Golang: Panik nachdem Mutex Schlösser zu lange gehalten wurden
Ich möchte zwei neue Funktionen erstellen (Lock()
und Unlock()
), so dass Lock einen Timer hat, der in Panik gerät, wenn Lock für mehr als 200 ms gehalten wurde.
Dies ist mein aktueller Versuch, aber es funktioniert nicht, irgendein Hinweis?
type ShardKV struct {
lockChan chan bool
}
func (kv *App) lock(reason string) {
kv.mu.Lock()
f := func() {
fmt.Println("PANIC: ms passed")
select {
case <- kv.lockChan:
//
default:
panic("PANIC: " + reason)
}
}
time.AfterFunc(time.Second * 10, f)
}
func (kv *App) unlock(reason string) {
kv.lockChan <- true
kv.mu.Unlock()
}
Wie erstellen Sie den Kanal? Es muss gepuffert werden, damit dieser Code funktioniert – creker
Ihr Code wartet 10 Sekunden, aber Sie sagen, dass Sie für 200 ms beabsichtigen. Sie haben nicht angegeben, warum Ihr Code nicht funktioniert. Könnte das der Grund sein? –