golang 管道线程安全吗


本文摘自php中文网,作者(*-*)浩,侵删。

如果把线程安全定义为允许多个goroutine同时去读写,那么golang 的channel 是线程安全的。不需要在并发读写同一个channe时加锁。

golang中的channel (推荐学习:go)

channel用于goroutine之间的通信

如果不用channel,使用共享全局变量的方式,需要加锁

1

2

3

4

5

6

// synchornized 同步

// golang中的 sync包中有互斥锁

var lock sync.Mutex  // mutex 互斥

lock.Lock() // 上锁

// 多个goroutine同时对相同的数据进行修改

lock.Unlock() // 解锁

使用同步锁并发效率会很低

channel主要用于goroutine通信和解决主线程等待goroutine执行结束再退出的问题

basic concept of channel

本质上是一个FIFO的数据结构-队列

线程安全,不需要加锁

channel是有类型的,如字符串channel chan string,只能保存string数据

以上就是golang 管道线程安全吗的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang 创建型设计模式 抽象工厂

rabbitmq 消息丢失处理机制 confirm模式 [go 版本]

一周 go world 新鲜事

手撸golang etcd raft协议之11

golang 程序结构

手撸golang 结构型设计模式 享元模式

go error实践

[系列] go - 常用签名算法的基准测试

手撸golang 结构型设计模式 桥接模式

gosumdb 设置私库

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...