Go 语言基础中goroutine和共享内存线程安全是怎样的
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,Go 语言基础中goroutine和共享内存线程安全是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。协程(goro
千家信息网最后更新 2026年11月04日Go 语言基础中goroutine和共享内存线程安全是怎样的
Go 语言基础中goroutine和共享内存线程安全是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
协程(goroutine)是更轻量级的线程
比Java中的线程效率更高
协程语法
go func() { //...}()一旦主goroutine中的代码执行完毕,当前的Go程序就会结束运行,无论其他的 goroutine是否已经在运行了。
让主goroutine等待其它 goroutine:
for i := 0; i < 10; i++ { go func() { fmt.Println(i) }()}time.Sleep(time.Millisecond * 1000)//goroutine 完成的时间很可能小于设置的等待时间,那么这就会造成多余的等待时间怎么才能让goroutine执行完后立刻执行下一个goroutine呢?
go语言提供的WaitGroup可以实现这样的功能.
代码改造:
var wg sync.WaitGroupfor i := 0; i < 10; i++ { wg.Add(1)//每启动一个协程增加一个等待 go func() { fmt.Println(i) wg.Done()//告诉协成等待的事务已经完成 }()}/*这样我们就不用设置等待时间了,但是执行输出的内容是这样的: 3 7 4 8 8 8 9 10 10 10, 很显然这种方式不能保证goroutine拿到唯一整数*/如何保证每个线程拿到的数是惟一的?
代码改造:
var wg sync.WaitGroupfor i := 0; i < 10; i++ { wg.Add(1)//每启动一个协程增加一个等待 go func(j int) {//把j只是个形参可以任意命名 fmt.Println(j) wg.Done()//告诉协成等待的事务已经完成 }(i)//把实参i传递给形参j}//执行结果:0 2 1 6 3 4 5 8 7 9我们把i值传递给j,i的变化不会影响j的值,所以输出的结果是唯一的
共享内存线程安全
func TestCounter(t *testing.T) { counter := 0 for i := 0; i < 5000; i++ { go func() { counter++ }() } time.Sleep(1 * time.Second) t.Logf("counter = %d", counter)}//执行结果: 4760 出现了线程安全的问题和大多数语言一样go也支持加锁保证线程的安全:
func TestCounterWaitGroup(t *testing.T) { var mut sync.Mutex//创建锁对象 var wg sync.WaitGroup counter := 0 for i := 0; i < 5000; i++ { wg.Add(1)//每启动一个协程增加一个等待 go func() { defer func() { mut.Unlock()//释放锁 }() mut.Lock()//开启锁 counter++ wg.Done()//告诉协成等待的事务已经完成 }() } wg.Wait()//等待协程 t.Logf("counter = %d", counter)}看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
线程
安全
时间
语言
事务
代码
结果
保证
内存
内容
形参
帮助
支持
改造
输出
运行
基础
语言基础
清楚
不用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
花魁咖啡
互联网金融科技
互联网科技公司税收优惠
互联网核心科技是什么
深圳互联网科技公司
互联网 卓越科技
为想互联网科技
亿账通互联网科技
唐信互联网科技 大连
海南购全球互联网科技
广州优美互联网科技
福州新华互联网科技学校 知乎
厦门比较好的科技互联网公司
健康食品互联网创新科技园项目
互联网保险科技创业
迪庆互联网科技招生
用友工业互联网科技发展
上海京穆互联网科技有限公司
互联网营销推广黑科技
广州有谷有贝互联网科技有限公司
中关村互联网科技集团
国智互联网科技
互联网 视角下的科技创新
左右互联网络科技
互联网汽车科技小镇
深圳国际航运科技和互联网
广州慧亚互联网科技怎么样
张家口科技产业互联网平台
北京互联网科技类企业分布
优雇互联网科技有限公司