golang 线程安全(expvar、Cond、Map、Once、Pool) 13

本文详细介绍了Golang中实现线程安全的几个关键特性:使用expvar进行公共变量的原子操作,Cond进行线程间的同步等待,内置线程安全的Map,Once确保多线程环境下代码只执行一次,以及Pool对象池的高效复用策略。这些特性在多线程编程中起到了关键作用。
摘要由CSDN通过智能技术生成

1.expvar(公共变量,原子操作

var (
	test = expvar.NewMap("Test")
	testInt = expvar.NewInt("TestInt")
)

func init() {
	test.Add("go", 10)
	test.Add("go1", 10)
}

/*
http://localhost:8080/debug/vars
可查看全局信息
*/
func main() {
	update()
	sock, err := net.Listen("tcp", "localhost:8080")
	if err != nil {
		panic("error")
	}
	go func() {
		http.Serve(sock, nil)
	}()
	select {}
}

func update()  {
	pubFloat := expvar.NewFloat("Float")
	pubFloat.Set(66)
	pubFloat.Add(0.1)
	test.Set("go",pubFloat)

	testInt.Set(66)
	testInt.Add(2)
	fmt.Println("int", testInt.String())
	fmt.Println("go", test.String())
}

2.Cond(等待其他线程执行完)

/*
func NewCond(l Locker) *Cond 创建一个Cond
func
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值