我有以下代码:
package main
import(
"log"
"os"
)
type LogFilter struct {}
func (t *LogFilter) Write(p []byte) (int, error) {
_ = log.Flags()
return os.Stderr.Write(p)
}
func main() {
log.SetOutput(&LogFilter{})
log.Println("Hello, playground")
}
哪些死锁是因为 http://golang.org/src/pkg/log/log.go第 135 行将锁定推迟到写入之后。在本文中,我正在调用试图获取锁的 Flags。
是否有任何理由认为它们(写入和标志)应该共享相同的互斥量?
最佳答案
它共享互斥量,因为 Logger
在写入输出时也会读取其内部的 flags
字段。
虽然它可以更精细地锁定,但您必须提供一个很好的案例来证明增加的复杂性是合理的。如果您需要过滤器中的标志,我会在您初始化结构时复制它们。
关于go - log.Flags() 应该与 write 共享相同的 sync.Mutex 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041849/