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

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

channel用于goroutine之间的通信

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

// 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数据

更多相关文章

  1. golang是多线程模式吗?
  2. 深入SQLite多线程的使用总结详解
  3. 关于SQLite多线程的用法详解
  4. 没想到,这么简单的线程池用法,深藏这么多坑
  5. 协作,才能更好的中断线程
  6. Node.js多线程完全指南[每日前端夜话0x43]
  7. 理解Redis单线程运行模式
  8. 代码详解Python多线程、多进程、协程
  9. 简单的php多线程解决方法

随机推荐

  1. 强制动态加载的类来扩展或实现接口
  2. PHP加密解密明文相同每次密文不一样非对
  3. 仅获取单元素php数组中的值的最佳方法。
  4. 将主DB复制到不同的从站
  5. 在CodeIgniter中包含视图的最佳方法。
  6. 如果我们通过引用传递,是不是创建了变量?
  7. 如果机器安装了oracle (oci8和/或pdo_oci
  8. 自动重定向到XML返回的URL?
  9. 在Symfony2中使用Doctrine DQL时检索的记
  10. 阅读使用JavaScript生成的页面