💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 原子操作(atomic包) 代码中的加锁操作因为涉及内核态的上下文切换会比较耗时、代价比较高。针对基本数据类型我们还可以使用原子操作来保证并发安全,因为原子操作是Go语言提供的方法它在用户态就可以完成,因此性能比加锁操作更好。Go语言中原子操作由内置的标准库sync/atomic提供 | 方法 | 解释 | | --- | --- | | func LoadInt32(addr*int32) (val int32) | 读取操作 | | func LoadInt64(addr `*int64`) (val int64) | 读取操作 | | func LoadUint32(addr`*uint32`) (val uint32) | 读取操作 | | func LoadUint64(addr`*uint64`) (val uint64) | 读取操作 | |func LoadUintptr(addr`*uintptr`) (val uintptr) | 读取操作 | | func LoadPointer(addr`*unsafe.Pointer`) (val unsafe.Pointer) | 读取操作 | | func StoreInt32(addr`*int32`, val int32) | 写入操作 | | func StoreInt64(addr`*int64`, val int64) | 写入操作 | | func StoreUint32(addr`*uint32`, val uint32) | 写入操作 | | func StoreUint64(addr`*uint64`, val uint64) | 写入操作 | | func StoreUintptr(addr`*uintptr`, val uintptr) | 写入操作 | | func StorePointer(addr`*unsafe.Pointer`, val unsafe.Pointer) | 写入操作 | | func AddInt32(addr`*int32`, delta int32) (new int32) | 修改操作 | | func AddInt64(addr`*int64`, delta int64) (new int64) | 修改操作 | | func AddUint32(addr`*uint32`, delta uint32) (new uint32) | 修改操作 | | func AddUint64(addr`*uint64`, delta uint64) (new uint64) | 修改操作 | | func AddUintptr(addr`*uintptr`, delta uintptr) (new uintptr) | 修改操作 | | func SwapInt32(addr`*int32`, new int32) (old int32) | 交换操作 | | func SwapInt64(addr`*int64`, new int64) (old int64) | 交换操作 | | func SwapUint32(addr`*uint32`, new uint32) (old uint32) | 交换操作 | | func SwapUint64(addr`*uint64`, new uint64) (old uint64) | 交换操作 | | func SwapUintptr(addr`*uintptr`, new uintptr) (old uintptr) | 交换操作 | | func SwapPointer(addr`*unsafe.Pointer`, new unsafe.Pointer) (old unsafe.Pointer) | 交换操作 | | func CompareAndSwapInt32(addr`*int32`, old, new int32) (swapped bool) | 比较并交换操作 | | func CompareAndSwapInt64(addr`*int64`, old, new int64) (swapped bool) | 比较并交换操作 | | func CompareAndSwapUint32(addr`*uint32`, old, new uint32) (swapped bool) | 比较并交换操作 | | func CompareAndSwapUint64(addr`*uint64`, old, new uint64) (swapped bool) | 比较并交换操作 | | func CompareAndSwapUintptr(addr`*uintptr`, old, new uintptr) (swapped bool) | 比较并交换操作 | | func CompareAndSwapPointer(addr`*unsafe.Pointer`, old, new unsafe.Pointer) (swapped bool) | 比较并交换操作 |