@@ -27,12 +27,12 @@ type Time struct {
27
27
// level 在near盘子里就是1, 在T2ToTt[0]盘子里就是2起步
28
28
// index 就是各自盘子的索引值
29
29
// seq 自增id
30
- version uint64
30
+ version atomic. Uint64
31
31
}
32
32
33
33
func newTimeHead (level uint64 , index uint64 ) * Time {
34
34
head := & Time {}
35
- head .version = genVersionHeight (level , index )
35
+ head .version . Store ( genVersionHeight (level , index ) )
36
36
head .Init ()
37
37
return head
38
38
}
@@ -44,23 +44,23 @@ func genVersionHeight(level uint64, index uint64) uint64 {
44
44
func (t * Time ) lockPushBack (node * timeNode , level uint64 , index uint64 ) {
45
45
t .Lock ()
46
46
defer t .Unlock ()
47
- if atomic . LoadUint32 ( & node .stop ) == haveStop {
47
+ if node .stop . Load ( ) == haveStop {
48
48
return
49
49
}
50
50
51
51
t .AddTail (& node .Head )
52
52
atomic .StorePointer (& node .list , unsafe .Pointer (t ))
53
53
//更新节点的version信息
54
- atomic . StoreUint64 ( & node .version , atomic . LoadUint64 ( & t .version ))
54
+ node .version . Store ( t .version . Load ( ))
55
55
}
56
56
57
57
type timeNode struct {
58
58
expire uint64
59
59
userExpire time.Duration
60
60
callback func ()
61
- stop uint32
61
+ stop atomic. Uint32
62
62
list unsafe.Pointer //存放表头信息
63
- version uint64 //保存节点版本信息
63
+ version atomic. Uint64 //保存节点版本信息
64
64
isSchedule bool
65
65
root * timeWheel
66
66
list.Head
@@ -78,15 +78,15 @@ type timeNode struct {
78
78
// 2和3.2状态会是没有锁保护下的操作,会有数据竞争
79
79
func (t * timeNode ) Stop () bool {
80
80
81
- atomic . StoreUint32 ( & t .stop , haveStop )
81
+ t .stop . Store ( haveStop )
82
82
83
83
// 使用版本号算法让timeNode知道自己是否被移动了
84
84
// timeNode的version和表头的version一样表示没有被移动可以直接删除
85
85
// 如果不一样,可能在第2或者3.2状态,使用惰性删除
86
86
cpyList := (* Time )(atomic .LoadPointer (& t .list ))
87
87
cpyList .Lock ()
88
88
defer cpyList .Unlock ()
89
- if atomic . LoadUint64 ( & t .version ) != atomic . LoadUint64 ( & cpyList .version ) {
89
+ if t .version . Load ( ) != cpyList .version . Load ( ) {
90
90
return false
91
91
}
92
92
0 commit comments