File tree Expand file tree Collapse file tree 3 files changed +13
-37
lines changed Expand file tree Collapse file tree 3 files changed +13
-37
lines changed Original file line number Diff line number Diff line change @@ -93,29 +93,17 @@ func (m *Map) Store(key, value interface{}) {
93
93
//
94
94
// 如果 entry 被删除了,则 tryStore 返回 false 且不修改 entry
95
95
func (e *entry ) tryStore (i *interface {}) bool {
96
-
97
- // 读取 entry
98
- p := atomic.LoadPointer (&e.p )
99
-
100
- // 如果 entry 已经删除,则无法存储,返回
101
- if p == expunged {
102
- return false
103
- }
104
-
105
96
for {
106
- // 交换 p 和 i 的值,原子操作,如果成功则立即返回
107
- if atomic.CompareAndSwapPointer (&e.p , p, unsafe.Pointer (i)) {
108
- return true
109
- }
110
-
111
- // 如果没有成功,则再读一次 entry
112
- p = atomic.LoadPointer (&e.p )
97
+ // 读取 entry
98
+ p := atomic.LoadPointer (&e.p )
113
99
// 如果 entry 已经删除,则无法存储,返回
114
100
if p == expunged {
115
101
return false
116
102
}
117
-
118
- // 再次尝试,说明只要 key 不删除,那么更新操作一定会直接更新 read map,不涉及 dirty map
103
+ // 交换 p 和 i 的值,如果成功则立即返回
104
+ if atomic.CompareAndSwapPointer (&e.p , p, unsafe.Pointer (i)) {
105
+ return true
106
+ }
119
107
}
120
108
}
121
109
```
Original file line number Diff line number Diff line change @@ -172,29 +172,17 @@ func (m *Map) Store(key, value interface{}) {
172
172
//
173
173
// 如果 entry 被删除了,则 tryStore 返回 false 且不修改 entry
174
174
func (e * entry ) tryStore (i * interface {}) bool {
175
-
176
- // 读取 entry
177
- p := atomic .LoadPointer (& e .p )
178
-
179
- // 如果 entry 已经删除,则无法存储,返回
180
- if p == expunged {
181
- return false
182
- }
183
-
184
175
for {
185
- // 交换 p 和 i 的值,原子操作,如果成功则立即返回
186
- if atomic .CompareAndSwapPointer (& e .p , p , unsafe .Pointer (i )) {
187
- return true
188
- }
189
-
190
- // 如果没有成功,则再读一次 entry
191
- p = atomic .LoadPointer (& e .p )
176
+ // 读取 entry
177
+ p := atomic .LoadPointer (& e .p )
192
178
// 如果 entry 已经删除,则无法存储,返回
193
179
if p == expunged {
194
180
return false
195
181
}
196
-
197
- // 再次尝试,说明只要 key 不删除,那么更新操作一定会直接更新 read map,不涉及 dirty map
182
+ // 交换 p 和 i 的值,如果成功则立即返回
183
+ if atomic .CompareAndSwapPointer (& e .p , p , unsafe .Pointer (i )) {
184
+ return true
185
+ }
198
186
}
199
187
}
200
188
Original file line number Diff line number Diff line change @@ -50,7 +50,7 @@ func init() {
50
50
}
51
51
52
52
// Active spinning runtime support.
53
- // runtime_canSpin returns true is spinning makes sense at the moment.
53
+ // runtime_canSpin reports whether is spinning makes sense at the moment.
54
54
func runtime_canSpin (i int ) bool
55
55
56
56
// runtime_doSpin does active spinning.
You can’t perform that action at this time.
0 commit comments