Update dependencies
This commit is contained in:
36
vendor/tailscale.com/syncs/shardvalue_go.go
generated
vendored
Normal file
36
vendor/tailscale.com/syncs/shardvalue_go.go
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
//go:build !tailscale_go
|
||||
|
||||
package syncs
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type shardValuePool struct {
|
||||
atomic.Int64
|
||||
sync.Pool
|
||||
}
|
||||
|
||||
// NewShardValue constructs a new ShardValue[T] with a shard per CPU.
|
||||
func NewShardValue[T any]() *ShardValue[T] {
|
||||
sp := &ShardValue[T]{
|
||||
shards: make([]T, runtime.NumCPU()),
|
||||
}
|
||||
sp.pool.New = func() any {
|
||||
i := sp.pool.Add(1) - 1
|
||||
return &sp.shards[i%int64(len(sp.shards))]
|
||||
}
|
||||
return sp
|
||||
}
|
||||
|
||||
// One yields a pointer to a single shard value with best-effort P-locality.
|
||||
func (sp *ShardValue[T]) One(yield func(*T)) {
|
||||
v := sp.pool.Get().(*T)
|
||||
yield(v)
|
||||
sp.pool.Put(v)
|
||||
}
|
||||
Reference in New Issue
Block a user