goProject/trunk/goutil/syncUtil/syncUtil.go

34 lines
1006 B
Go
Raw Normal View History

2025-01-06 16:01:02 +08:00
/*
由于Go不提供超时锁所以自己实现了支持超时机制的互斥锁Locker和读写锁RWLocker
为了方便供第三方程序使用提供了根据Key获取超时互斥锁和超时读写锁的复合对象LockerUtil和RWLockerUtil
为了在出现锁超时时方便查找问题会记录上次成功获得锁时的堆栈信息并且在本次获取锁失败时同时返回上次成功时的堆栈信息和本次的堆栈信息
*/
package syncUtil
const (
// 默认超时的毫秒数(1小时)
con_Default_Timeout_Milliseconds = 60 * 60 * 1000
// 写锁保护时间(纳秒)
con_Write_Protect_Nanoseconds = 5 * 1000 * 1000
)
var (
// 是否记录堆栈信息的状态
if_record_stack_info = false
)
// 获取超时时间
func getTimeout(timeout int) int {
if timeout > 0 {
return timeout
} else {
return con_Default_Timeout_Milliseconds
}
}
// 设置是否记录堆栈信息的状态
func SetIfRecordStackInfo(value bool) {
if_record_stack_info = value
}