go 并发赋值安全性

32/64位机器读写占用空间小于或等于32/64位的变量是原子操作,超过时属于非原子操作。

安全的赋值类型
基本数据类型:字节型、布尔型、整型、浮点型、字符型
其他数据类型:指针、函数

不安全的赋值类型
基本数据类型:复数型、字符串
其他数据类型:数组、切片、字典、通道、接口、结构体

可以通过atomic.Value来保证并发赋值的安全性。

package main

import (
	"errors"
	"fmt"
	"sync/atomic"
)

type Stu struct {
	A int
	B int
}

func main() {
	var v atomic.Value
	v.Store(Stu{
		A: 1,
		B: 2,
	})
	stu, ok := v.Load().(Stu)
	if !ok {
		panic(errors.New("type not Stu"))
	}
	// 1 2
	fmt.Printf("%d %d", stu.A, stu.B)
}

 

posted on 2025-10-19 16:41  王景迁  阅读(0)  评论(0)    收藏  举报

导航