log.Flags() 应该与 write 共享相同的 sync.Mutex 吗?

我有以下代码:


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。


他们(写入和标志)是否应该共享相同的互斥锁?


弑天下
浏览 249回答 1
1回答

冉冉说

它共享互斥锁,因为Logger它flags在写入输出时也读取其内部字段。当然,它可以更精细地锁定,但您必须提出一个很好的案例来证明增加的复杂性。如果您需要过滤器中的标志,我会在您初始化结构时复制它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go