github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/xsync/value.go (about)

     1  package xsync
     2  
     3  type Value[T any] struct {
     4  	v  T
     5  	mu RWMutex
     6  }
     7  
     8  func NewValue[T any](initValue T) *Value[T] {
     9  	return &Value[T]{v: initValue}
    10  }
    11  
    12  func (v *Value[T]) Get() T {
    13  	v.mu.RLock()
    14  	defer v.mu.RUnlock()
    15  
    16  	return v.v
    17  }
    18  
    19  func (v *Value[T]) Change(change func(old T) T) {
    20  	v.mu.WithLock(func() {
    21  		v.v = change(v.v)
    22  	})
    23  }