代码拉取完成,页面将自动刷新
package routine
var unset entry = &object{}
type object struct {
none bool //nolint:unused
}
type threadLocalMap struct {
table []entry
}
func (mp *threadLocalMap) get(index int) entry {
lookup := mp.table
if index < len(lookup) {
return lookup[index]
}
return unset
}
func (mp *threadLocalMap) set(index int, value entry) {
lookup := mp.table
if index < len(lookup) {
lookup[index] = value
return
}
mp.expandAndSet(index, value)
}
func (mp *threadLocalMap) remove(index int) {
lookup := mp.table
if index < len(lookup) {
lookup[index] = unset
}
}
func (mp *threadLocalMap) expandAndSet(index int, value entry) {
oldArray := mp.table
oldCapacity := len(oldArray)
newCapacity := index
newCapacity |= newCapacity >> 1
newCapacity |= newCapacity >> 2
newCapacity |= newCapacity >> 4
newCapacity |= newCapacity >> 8
newCapacity |= newCapacity >> 16
newCapacity++
newArray := make([]entry, newCapacity)
copy(newArray, oldArray)
fill(newArray, oldCapacity, newCapacity, unset)
newArray[index] = value
mp.table = newArray
}
//go:norace
func createInheritedMap() *threadLocalMap {
parent := currentThread(false)
if parent == nil {
return nil
}
parentMap := parent.inheritableThreadLocals
if parentMap == nil {
return nil
}
lookup := parentMap.table
if lookup == nil {
return nil
}
table := make([]entry, len(lookup))
copy(table, lookup)
for i := 0; i < len(table); i++ {
if c, ok := entryAssert[Cloneable](table[i]); ok && !isNil(c) {
table[i] = entry(c.Clone())
}
}
return &threadLocalMap{table: table}
}
func fill[T any](a []T, fromIndex int, toIndex int, val T) {
for i := fromIndex; i < toIndex; i++ {
a[i] = val
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。