我有以下代码:package mainimport( "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。他们(写入和标志)是否应该共享相同的互斥锁?
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
它共享互斥锁,因为Logger
它flags
在写入输出时也读取其内部字段。
当然,它可以更精细地锁定,但您必须提出一个很好的案例来证明增加的复杂性。如果您需要过滤器中的标志,我会在您初始化结构时复制它们。
- 1 回答
- 0 关注
- 247 浏览
添加回答
举报
0/150
提交
取消