Golang 第三方库线程问题

我刚接触 golang,对于 golang 生态不是特别了解。所以有些简单的问题想请教一下各位前辈。

  1. 对于 golang 生态中的第三方库,在使用的时候是不是都能假设这个库是“线程安全的”?
  2. 除了读它的源码,是否有一个快速的方法判断这个第三方库是否是“线程安全”的?
  3. AWS 的 golang sdk 里面的 client 是否都能认为是“线程安全”的?就是说同一个 client,我可以在多个 goroutine 中复用?

希望各位前辈给予指教,谢谢!

已邀请:

yuchen16

赞同来自: HYM

不能假设所有的库都是“线程安全的”,具体要看第三方库的文档说明,如果没有说明的话就自己翻源码吧; 没有什么好的方法能判断某个包或者函数是thread-safe吧,都要看具体实现 欢迎大家讨论

lrita

赞同来自: HYM

看源码,是不是线程安全很容易看出来

plain

赞同来自: HYM

看例子和说明,一般猜一下就够了,go的代码一般都做到线程安全的。

HYM

赞同来自:

非常感谢各位前辈。

kevin - 杭州云柚科技

赞同来自:

  1. 不能
  2. 猜测也不准,以文档和代码为准。

simple - 既要有梦想,又要有实力

赞同来自:

  1. 常用的如C, Cpp, Java等等支持传统【线程和锁】并发编程模型的语言等,都要时刻考虑线程安全问题。
  2. 文档,源码以及自己写测试程序验证都可能会用到,取决于你用的三方包的代码质量。
  3. 好的三方包一般都会把线程安全问题在内部解决掉,但我们不能假设它一定做了。 想写出正确的,高性能的并发程序的确是一件很难的事,我曾经还怀疑过linux的系统api如文件IO,socket等是否是线程安全的。有一本书《七周七并发模型》推荐看看,它可以让你对常见的并发模型有一个全面的认识。

要回复问题请先登录注册