代码拉取完成,页面将自动刷新
package routine
import "sync/atomic"
var threadLocalIndex int32 = -1
func nextThreadLocalIndex() int {
index := atomic.AddInt32(&threadLocalIndex, 1)
if index < 0 {
atomic.AddInt32(&threadLocalIndex, -1)
panic("too many thread-local indexed variables")
}
return int(index)
}
type threadLocal struct {
index int
supplier Supplier
}
func (tls *threadLocal) Get() any {
t := currentThread(true)
mp := tls.getMap(t)
if mp != nil {
v := mp.get(tls.index)
if v != unset {
return v
}
}
return tls.setInitialValue(t)
}
func (tls *threadLocal) Set(value any) {
t := currentThread(true)
mp := tls.getMap(t)
if mp != nil {
mp.set(tls.index, value)
} else {
tls.createMap(t, value)
}
}
func (tls *threadLocal) Remove() {
t := currentThread(false)
if t == nil {
return
}
mp := tls.getMap(t)
if mp != nil {
mp.remove(tls.index)
}
}
func (tls *threadLocal) getMap(t *thread) *threadLocalMap {
return t.threadLocals
}
func (tls *threadLocal) createMap(t *thread, firstValue any) {
mp := &threadLocalMap{}
mp.set(tls.index, firstValue)
t.threadLocals = mp
}
func (tls *threadLocal) setInitialValue(t *thread) any {
value := tls.initialValue()
mp := tls.getMap(t)
if mp != nil {
mp.set(tls.index, value)
} else {
tls.createMap(t, value)
}
return value
}
func (tls *threadLocal) initialValue() any {
if tls.supplier == nil {
return nil
}
return tls.supplier()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。