github.com/polarismesh/polaris@v1.17.8/common/utils/atomic.go (about) 1 /** 2 * Tencent is pleased to support the open source community by making Polaris available. 3 * 4 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. 5 * 6 * Licensed under the BSD 3-Clause License (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * https://opensource.org/licenses/BSD-3-Clause 11 * 12 * Unless required by applicable law or agreed to in writing, software distributed 13 * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 14 * CONDITIONS OF ANY KIND, either express or implied. See the License for the 15 * specific language governing permissions and limitations under the License. 16 */ 17 18 package utils 19 20 import "sync/atomic" 21 22 func NewAtomicValue[V any](v V) *AtomicValue[V] { 23 a := new(AtomicValue[V]) 24 a.Store(v) 25 return a 26 } 27 28 type AtomicValue[V any] struct { 29 a atomic.Value 30 } 31 32 func (a *AtomicValue[V]) Store(val V) { 33 a.a.Store(val) 34 } 35 36 func (a *AtomicValue[V]) Load() V { 37 return a.a.Load().(V) 38 }