为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
弑天下 2021-08-16 20:00:47
我有以下代码: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个赞

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

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


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信