Redian新闻
>
golang 一个thread safe singleton问题
avatar
golang 一个thread safe singleton问题# Programming - 葵花宝典
l*y
1
第一次堪称史上最水的签经。准备来美国探亲,玩一个月,ld帮着准备了一堆材料,捧
着就去了大使馆。到我的时候,上去说了声你好,签证官开始敲敲打打,不到一分钟,
撕了张条给我,说,你通过了。全程没有问一个问题。。。当时觉得平时人品没白攒啊
,晚上就请朋友吃饭继续攒人品。
第二次是一年后,准备来美国和ld会合。一大早,我排第二个,签证官看起来心情不错
,问了几个常规问题,lg是干嘛的之类,突然问我:你为啥叫这个名字?于是我俩就这
个问题讨论了一会儿,又是水过。。。
第三次和ld一起回国,他因为中间有transfer需要去使馆面签,我没有这个问题于是中
信代签。结果是他被check,等了一个月,我很顺利地两周多拿到visa。
avatar
s*k
2
比如需要初始化client,保证thread safe singleton, 看到很多资料都用once.Do(
func(){})这样来做,但是同事看到如果在package用init,If multiple packages
import a package P, P will be initialized only once. 这里的init是不是也是
thread safe?
avatar
i*e
3
运气不错!恭喜
avatar
d*n
4
not thread safe.
init(s) was called by the order of dependency tree.
if in same folder level, called alphabetical order.
e.g. if two init functions have concurrent writings to same map, then god
bless you.
BTW: you can avoid such thing happen by using sync.Mutex or concurrent map
in golang 1.9+
avatar
d*n
5
you can check it by using golang's race detector.
$ go test -race mypkg // to test the package
$ go run -race mysrc.go // to run the source file
$ go build -race mycmd // to build the command
$ go install -race mypkg // to install the package
avatar
s*k
6
Thanks, 用sync.Once也可以吧

【在 d****n 的大作中提到】
: you can check it by using golang's race detector.
: $ go test -race mypkg // to test the package
: $ go run -race mysrc.go // to run the source file
: $ go build -race mycmd // to build the command
: $ go install -race mypkg // to install the package

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。