Pau*_*kin 7
syncProducer
syncProducer
RLock
与其明确地使用 RWLocks,不如使用它(假设目标是延迟初始化变量):
var (
syncOnce sync.Once
syncProducerInternal *syncProducerType
)
func syncProducer() *syncProducerType {
syncOnce.Do(func() { syncProducerInternal = createSyncKafkaProducer() })
return syncProducerInternal
}
syncProducer()
- @SwiftD 指针可以在读取时部分写入 RAM。然后你可能会得到一些 0 字节和一些指针字节。所以不是零,但也不是有效的指针。正如我在问题中所说,这是否真的会发生取决于体系结构等。如果稍后在读取变量时获取读取锁可能仍然可以,但我想这段代码的重点是避免这种情况。 (2认同)
- 锁定的很好解释 https://launchdarkly.com/blog/golang-pearl-thread-safe-writes-and-double-checked-locking-in-go/ (2认同)