Files
carbon/frozen.go
gouguoyin 249b2d998d refactor: 优化 frozen.go 中的互斥锁使用
- 在 SetTestNow 和 ClearTestNow 函数中,将互斥锁的解锁操作移至 defer 语句
- 这样可以确保在函数返回前始终执行解锁操作,提高代码的安全性和可读性
2025-09-16 11:04:27 +08:00

43 lines
758 B
Go

package carbon
import (
"sync"
"sync/atomic"
)
// FrozenNow defines a FrozenNow struct.
type FrozenNow struct {
isFrozen int32
testNow *Carbon
rw sync.RWMutex
}
var frozenNow = &FrozenNow{}
// SetTestNow sets a test Carbon instance for now.
func SetTestNow(c *Carbon) {
if c == nil {
return
}
frozenNow.rw.Lock()
defer frozenNow.rw.Unlock()
frozenNow.testNow = c
atomic.StoreInt32(&frozenNow.isFrozen, 1)
}
// ClearTestNow clears the test Carbon instance for now.
func ClearTestNow() {
frozenNow.rw.Lock()
defer frozenNow.rw.Unlock()
frozenNow.testNow = nil
atomic.StoreInt32(&frozenNow.isFrozen, 0)
}
// IsTestNow reports whether is testing time.
func IsTestNow() bool {
return atomic.LoadInt32(&frozenNow.isFrozen) == 1
}