34 lines
1006 B
Go
34 lines
1006 B
Go
/*
|
||
由于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
|
||
}
|