atomicx

package
v2.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

Documentation

Overview

Package atomicx 提供原子操作的类型安全封装。

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Value

type Value[T any] struct {
	// contains filtered or unexported fields
}

Value 是对 atomic.Value 的泛型封装 相比直接使用 atomic.Value, - Load 方法大概开销多了 0.5 ns - Store 方法多了不到 2 ns - Swap 方法多了 14 ns - CompareAndSwap 在失败的情况下,会多 2 ns,成功的时候多了 0.3 ns 使用 NewValue 或者 NewValueOf 来创建实例

func NewValue

func NewValue[T any]() *Value[T]

NewValue 会创建一个 Value 对象,里面存放着 T 的零值 注意,这个零值是带了类型的零值

Example
val := NewValue[int]()
data := val.Load()
fmt.Println(data)
Output:
0

func NewValueOf

func NewValueOf[T any](t T) *Value[T]

NewValueOf 会使用传入的值来创建一个 Value 对象

Example
val := NewValueOf[int](123)
data := val.Load()
fmt.Println(data)
Output:
123

func (*Value[T]) CompareAndSwap

func (v *Value[T]) CompareAndSwap(old, new T) (swapped bool)

CompareAndSwap 会将传入的值和当前 Value 存放的值进行比较,如果相同,替换当前 Value 存放的值,并返回替换结果

Example
val := NewValueOf[int](123)
swapped := val.CompareAndSwap(123, 456)
fmt.Println(swapped)

swapped = val.CompareAndSwap(455, 459)
fmt.Println(swapped)
Output:
true
false

func (*Value[T]) Load

func (v *Value[T]) Load() (val T)

Load 会返回当前 Value 存放的值 注意:如果存储了错误类型的值,会panic

Example
val := NewValueOf[int](123)
data := val.Load()
fmt.Println(data)
Output:
123

func (*Value[T]) LoadSafe

func (v *Value[T]) LoadSafe() (val T, ok bool)

LoadSafe 安全地加载值,如果存储了错误类型的值,返回零值和 false

func (*Value[T]) Store

func (v *Value[T]) Store(val T)

Store 会将传入的值保存到 Value 中

Example
val := NewValueOf[int](123)
data := val.Load()
fmt.Println(data)
val.Store(456)
data = val.Load()
fmt.Println(data)
Output:
123
456

func (*Value[T]) Swap

func (v *Value[T]) Swap(new T) (old T)

Swap 会将传入的值替换当前 Value 存放的值,并返回替换前的值

Example
val := NewValueOf[int](123)
oldVal := val.Swap(456)
newVal := val.Load()
fmt.Printf("old: %d, new: %d", oldVal, newVal)
Output:
old: 123, new: 456

func (*Value[T]) SwapSafe

func (v *Value[T]) SwapSafe(new T) (old T, ok bool)

SwapSafe 安全地交换值,如果存储了错误类型的值,返回零值和 false

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL