log.Flags()是否应该像write一样共享sync.Mutex?

时间:2014-09-25 15:01:16

标签: go

我有以下代码:

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。

他们(Write& Flags)应该共享相同的互斥锁是否有任何理由?

1 个答案:

答案 0 :(得分:0)

它共享互斥锁,因为Logger在写入输出时也会读取其内部flags字段。

当然,它可以更精确地锁定,但你必须做出一个好的案例来证明增加的复杂性。如果您需要过滤器中的标志,我会在初始化结构时将其复制。